0

行列 M の各列を演算子 N で変換したいと思います。Eigen を使用すると、これを事前乗算で表現できます。

M.colwise() *= N;

しかし、乗算M_j * Nは数学的に定義されていません。

ループを書かないようにする方法はありますか?

4

1 に答える 1

0

Mの各列を左から掛けたい場合はN、通常の行列 - 行列 - 乗算を実行するだけです:

M = N * M;

N*Mこれは一時的に評価され、次に に移動されMます。これを頻繁に行い、そのために割り当てられたメモリを再利用したい場合は、M_temp前のどこかで一時行列を宣言して次のように記述します。

M_temp.noalias() = N * M;
M.swap(M_temp);  // M_temp has the old memory of M; Swapping is O(1)

メモリ消費が多すぎるのが心配な場合は、次のように書くことができます

for(long i=0; i<M.cols()-3; i+=4)
    M.middleCols<4>(i) = N * M.middleCols<4>(i);
M.rightCols(M.cols()%4) = N * M.rightCols(M.cols()%4);
于 2017-05-23T07:37:02.137 に答える