将二次矩阵转换为另一个矩阵

时间:2013-03-14 11:04:45

标签: c++ eigen

我尝试将转置从一个MatrixX*转换为另一个(不是二次但具有正确的尺寸)。然而,我能找到的最好的是Transpose< Derived > ::transpose()函数。

是否有调用将结果放入已分配的Matrix而不是分配新的?

编辑:

实际上我在矩阵之上使用Eigen::Map

typedef Eigen::Matrix<std::uint8_t, Eigen::Dynamic, Eigen::Dynamic> matrix_type;
typedef Eigen::Map<matrix_type> map_type;

const map_type src ( src_ptr , width , height );
      map_type dest( dest_ptr, height, width  );

map.transposeInPlace();

使用transposeInPlace()会在Derived& DenseBase<Derived> ::lazyAssign(const DenseBase<OtherDerived>& other)中触发断言。

2 个答案:

答案 0 :(得分:2)

尝试使用transposeInPlace()功能

以下是文档:http://eigen.tuxfamily.org/dox/TutorialMatrixArithmetic.html

  

对于就地转置,例如在a = a.transpose()中,   只需使用transposeInPlace()函数:

MatrixXf a(2,3); a << 1, 2, 3, 4, 5, 6;
cout << "Here is the initial matrix a:\n" << a << endl;
a.transposeInPlace();
cout << "and after being transposed:\n" << a << endl;

更新:正如Zeta在评论中提到的,矩阵对象应该可以调整大小 - 对所有MatrixX *对象都是如此。

答案 1 :(得分:1)

在Matrix上使用Eigen::Map确实会导致断言,因为transposeInPlace似乎Eigen::Map似乎不可能(AKA是一个错误)。

幸运的是,使用常规::transpose很好,因为Eigen使用了较晚的数据分配。