给定两个动态的rxc矩阵,我如何交错行来产生一个2rxc矩阵
Given two dynamic R x C matrixes, how can I interleave the rows to produce one 2R x C matrix?
使用特征2,给定矩阵a
a_0_0, a_0_1, a_0_2, ...
a_1_0, a_1_0, a_1_2, ...
...
和矩阵B:
b_0_0, b_0_1, b_0_2, ...
b_1_0, b_1_1, b_1_2, ...
...
,其中A和B具有相同的维度,我想交叉行,产生:
a_0_0, a_0_1, a_0_2, ...
b_0_0, b_0_1, b_0_2, ...
a_1_0, a_1_0, a_1_2, ...
b_1_0, b_1_1, b_1_2, ...
...
显然,我可以写一个函数,它将构造一个适当维数的输出矩阵,然后循环遍历每个输入矩阵并为结果分配元素。但我不想重新发明轮子,所以如果eigen2已经有一种机制来优雅地表达这种矩阵手术,我更愿意使用它。
我确实看了特征文档,没有什么明显正确的。我发现最接近的东西是MatrixBase::select,但这确实'元素从a或元素从b',我想要的是'元素从a然后元素从b在下一行'。
效率不是最重要的问题,因为我不需要在快速路径中这样做,只需要在初始化时这样做。
如果有更好的表示矩阵的方法,我为格式道歉。
将每个R x C矩阵乘以相应对角线上由0和1组成的2R x R矩阵,然后相加。
矩阵11 0 0 0 ...
0 0 0 0 ...
0 1 0 0 ...
0 0 0 0 ...
矩阵2 0 0 0 0 ...
1 0 0 0 ...
0 0 0 0 ...
0 1 0 0 ...
不确定这是否特定于Eigen3,但您可以使用Map
和Stride
对象交错行。
MatrixXi C(A.rows()+B.rows(),A.cols());
Map<MatrixXi,0,Stride<Dynamic,2> >(C.data(),A.rows(),A.cols(),Stride<Dynamic,2>(2*A.rows(),2)) = A;
Map<MatrixXi,0,Stride<Dynamic,2> >(C.data()+1,B.rows(),B.cols(),Stride<Dynamic,2>(2*B.rows(),2)) = B;
源相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 使用std::vector的OpenCL矩阵乘法
- 使用C++中的模板和运算符重载执行矩阵运算
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 具有N列和N行的矩阵,列必须具有N-1、N-2等值
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- GCC本机矩阵运算库
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 矩阵向量乘法(cublasDgemv)返回零
- 以螺旋方式打印矩阵的程序.(工作不好)
- OpenCV C++.快速计算混淆矩阵
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 在c++中初始化矩阵时出现分段错误(核心转储)
- Python中的for循环与C++有何不同
- 旋转模型矩阵时的形状失真
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 如何在cuSparse中得到稀疏矩阵的对角线
- 将特征矩阵的向量设置为0
- 给定两个动态的rxc矩阵,我如何交错行来产生一个2rxc矩阵