克罗内克张量积 Kron 的 OpenCV C++实现
写代码时候需要用到kron这个函数,matlab中有,但搜了一圈竟然OpenCV没有,而且复现的很一般,因此,我尽可能用最标准的方法,也就是兼容各种数据格式,实现了这个函数,复现之后,在我的研究中测试,无误。
下面就放上这个函数的声明,m1,m2
为输入的二维矩阵, mkron
为输出的对应矩阵。
void kron(cv::InputArray m1, cv::InputArray m2, cv::OutputArray mkron);
在matlab中的实例
m1 = [1,2,3;2,3,4];
m2 = [2,3,4;3,4,5];
mkron = kron(m1,m2);%% 输出:
mkron =2 3 4 4 6 8 6 9 123 4 5 6 8 10 9 12 154 6 8 6 9 12 8 12 166 8 10 9 12 15 12 16 20
在C++中用法:
int m1[] = { 1,2,3,2,3,4 };
int m2[] = { 2,3,4,3,4,5 };
cv::Mat cvm1(2, 3, CV_32SC1, m1), cvm2(2, 3, CV_32SC1, m2), mkron;
kron(cvm1, cvm2, mkron);
std::cout << mkron << std::endl;
// 输出
// [2, 3, 4, 4, 6, 8, 6, 9, 12;
// 3, 4, 5, 6, 8, 10, 9, 12, 15;
// 4, 6, 8, 6, 9, 12, 8, 12, 16;
// 6, 8, 10, 9, 12, 15, 12, 16, 20]
下面放上对应的源代码,注意,m1和m2数据类型要一致,且仅支持CV_64F, CV_32F, CV_32S, CV_16S这几种数据类型的计算。
void kron(cv::InputArray m1, cv::InputArray m2, cv::OutputArray mkron)
{int ma = m1.rows(), na = m1.cols(), mb = m2.rows(), nb = m2.cols();CV_Assert(m1.type() == m2.type() &&(m1.type() == CV_32F || m1.type() == CV_64F || m1.type() == CV_32S || m1.type() == CV_16S));cv::Mat K(ma*mb, na*nb, m1.type());cv::Mat tm1 = m1.getMat();cv::Mat tm2 = m2.getMat();cv::Rect roi;switch (m1.type()){case CV_64F:{double *_data = (double*)tm1.data;for (int i = 0; i < ma; i++){for (int j = 0; j < na; j++){roi.y = i * mb, roi.x = j * nb;roi.width = nb, roi.height = mb;tm2.convertTo(K(roi), m1.type(), _data[i*na + j]);}}K.copyTo(mkron);break;}case CV_32F:{float *_data = (float*)tm1.data;for (int i = 0; i < ma; i++){for (int j = 0; j < na; j++){roi.y = i * mb, roi.x = j * nb;roi.width = nb, roi.height = mb;tm2.convertTo(K(roi), m1.type(), _data[i*na + j]);}}K.copyTo(mkron);break;}case CV_32S:{int *_data = (int*)tm1.data;for (int i = 0; i < ma; i++){for (int j = 0; j < na; j++){roi.y = i * mb, roi.x = j * nb;roi.width = nb, roi.height = mb;tm2.convertTo(K(roi), m1.type(), _data[i*na + j]);}}K.copyTo(mkron);break;}case CV_16S:{short *_data = (short*)tm1.data;for (int i = 0; i < ma; i++){for (int j = 0; j < na; j++){roi.y = i * mb, roi.x = j * nb;roi.width = nb, roi.height = mb;tm2.convertTo(K(roi), m1.type(), _data[i*na + j]);}}K.copyTo(mkron);break;}default:break;}
}
代码的后面为了方便管理数据类型,利用switch对每个数据类型进行了判断,因此看起来冗余了许多,反正使用的时候直接粘贴就ok。
克罗内克张量积 Kron 的 OpenCV C++实现相关推荐
- 克罗内克内积 Kronecker product
克罗内克内积 Kronecker product ⊗\otimes⊗ 1.1 概述 克罗内克内积是一种特殊的张量积.任何两个形状的矩阵都可以进行克罗内克内积操作. 1.2 定义 Definition ...
- 【基础数学】克罗内克内积 Kronecker product
克罗内克内积 Kronecker product ⊗ 1.1 概述 克罗内克内积是一种特殊的张量积.任何两个形状的矩阵都可以进行克罗内克内积操作. 1.2 定义 Definition A⊗B的定义:A ...
- Kroneker Tensor:克罗内克张量
Kroneker Tensor,克罗内克张量 Kroneker张量源自Kronecker delta函数.Kronecker delta,即克罗内克函数(又称克罗内克δ函数.克罗内克δ.克罗内克符号) ...
- 克罗内克函数Kronecker Delta【OI Pharos 6.2.1】
克罗内克函数Kronecker Delta 1 定义 δij={0if i≠j,1if i=j.\delta _{{ij}}={\begin{cases}0&{\text{if }}i\neq ...
- 矩阵Kronecker(克罗内克)积
Kronecker(克罗内克)积 如果A是一个 m × n 的矩阵,而B是一个 p × q 的矩阵,克罗内克积A × B则是一个 mp × nq 的分块矩阵. 在R中使用kronecker来计算两个矩 ...
- 克罗内克递归单元(论文翻译)
Kronecker Recurrent Units Cijo Jose Idiap Research Institute & EPFL cijo.jose@idiap.ch Moustapha ...
- pyqpanda中的线路矩阵与科罗内克张量积的验证
最近开始使用pyqpanda答题,之前一直用qiskit搭电路,初上手pyqpanda 还是有些不适应. 开始入手,本帖验证下门电路的矩阵表示以及多门多线路的矩阵表达.(完全是为了印证下数学概念的表达 ...
- Python求矩阵的内积、外积、克罗内克直积、Khatri-Rao积
文章目录 矩阵乘法 内积和外积 直积 Khatri-Rao积 矩阵乘法 线性代数研究的核心对象是矩阵,所谓矩阵就是由 m m m行 n n n列的数组成的一个举行的数阵,从编程的角度理解,就是二维数组 ...
- Eigen实现克罗内克内积
eigen版本3.0以上 头文件: #include<eigen3/unsupported/Eigen/KroneckerProduct> //视情况自己选择 使用样例: Eigen::M ...
- Kronecker克罗内克 R代码实现
一.kronecker乘积是什么? 如果A是一个m×n的矩阵,而B是一个p×q的矩阵,克罗内克积则是一个mp×nq的分块矩阵 展开即为 举个例子 二.R代码落地 x <- matrix(1:6, ...
最新文章
- 维基百科联手谷歌翻译,结果“惨不忍睹”!
- 200余行代码,让你实时从视频中隐身
- python matplotlib animation制作世界人口变动动画
- poj 2817 WordStack (状态dp)
- 打印格式设置(SPAD)
- 我的web聊天之---序章
- 1.8 编程基础之多维数组 08 矩阵加法 python
- 原创 | 灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?
- CUDA11.1安装教程(python3.8)
- unity 继承了 获取_为什么说Unity能用单纯脚本实现的功能,尽量避免继承MonoBehavior,保持纯粹性?...
- 服务器centos安装mysql_centos下安装mysql服务器的方法
- spring视频教程下载
- 基于java的化妆品购物商城微信小程序的设计与实现 毕业设计毕设参考
- 惰性学习法与kNN分类
- 百度地图获取经纬度的方式
- python输出数字三角形_Python|2020蓝桥杯之数字三角形
- java 图片 加边框_给图片加图片边框 图片边框要求为PNG格式
- shader 什么是UV
- 3d游戏计算机怎么配置要求吗,3DMAX软件对电脑的配置要求
- 如何将两个excel表格合并