2017-11-08 15 views
0

と一列を乗算MatrixXdEigen3/C++:MatrixXdが所与、Eigen3/C++ライブラリを使用して別の

/x0 ... y0 \ 
    | x1 ... y1 | 
M = | ... ... ... | 
    |    | 
    \ xN ... yN/

以下に示すように変更されたバージョンを達成するために絶食方法は何ですか?ある

/x0 * y0 ... y0 \ 
    | x1 * y1 ... y1 | 
M' = | ... ... ...  | 
    |     | 
    \ xN * yN ... yN/

、一つの列(X-Sを有するもの)は、それ自体(Y-Sとその)別の列を乗算 によって置き換えられます。

答えて

1

最初の列ベクトルと最後の列ベクトルを係数に割り当てる方法を意味していますか?そこにそれを行うための多くの方法がありますが、最も簡単/最速の代替が

Eigen::MatrixXd M2{ M.rows(), M.cols() }; 

M2.rightCols(M.cols() - 1) = M.rightCols(M.cols() - 1); 
M2.leftCols<1>() = M.leftCols<1>().cwiseProduct(M.rightCols<1>()); 
のような行/ colsの所定の数に初期化されていないマトリックスを構築し、その後、ブロック割り当てされる可能性があります

Eigen::MatrixXd M2 = M; 

M2.leftCols<1>().array() *= M2.rightCols<1>().array(); 

かもしれません

これは私が知りませんが速いです(しかしあなたの好みのプロファイラーはします)。ここでは、将来の質問のための

は、公式Eigen quick referenceである。)

+0

私は「.block()」私は、任意のcolumsに対処するために許可された機能を使用して終了、しかし、あなたが与えたアイデアは解決へのヒントでした。 –

関連する問題