行列 M の各列を演算子 N で変換したいと思います。Eigen を使用すると、これを事前乗算で表現できます。
M.colwise() *= N;
しかし、乗算M_j * N
は数学的に定義されていません。
ループを書かないようにする方法はありますか?
行列 M の各列を演算子 N で変換したいと思います。Eigen を使用すると、これを事前乗算で表現できます。
M.colwise() *= N;
しかし、乗算M_j * N
は数学的に定義されていません。
ループを書かないようにする方法はありますか?
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);