0

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

是否有一个调用将结果放入已经分配的矩阵而不是分配一个新的?

编辑:

实际上我是Eigen::Map在 Matrix 上使用的。

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).

4

2 回答 2

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* 对象都是如此。

于 2013-03-14T11:06:39.667 回答
1

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

对我来说幸运的是,使用常规::transpose很好,因为Eigen使用后期分配数据。

于 2013-03-18T07:34:30.457 回答