0

あるものから別のものに転置しようとMatrixX*します(二次ではなく、正しい次元で)。しかし、私が見つけることができる最高のものはTranspose< Derived > ::transpose()機能です。

新しいものを割り当てる代わりに、既に割り当てられているマトリックスに結果を入れる呼び出しさえありますか?

編集:

実際、私は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)ます。

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

Eigen::Mapマトリックスの上で使用すると、実際にはアサートになります。これは、 (AKA バグ)transposeInPlaceにはまだ不可能であるように思われるためです。Eigen::Map

幸いなことに、データの遅延割り当てを使用する::transposeため、通常の使用は問題ありませんでした。Eigen

于 2013-03-18T07:34:30.457 に答える