web-dev-qa-db-ja.com

Eigenで大きな行列の内容をどのように初期化する必要がありますか?

(Eigenライブラリを使用して)行列を作成するときにゼロ以外の値になるように行列を初期化しようとしています。 forループなしでこれを行う良い方法はありますか?

たとえば、マトリックス全体を1.0に初期化したい場合は、次のようにします。

Eigen::MatrixXd mat(i,j) = 1.0;

または

Eigen::MatrixXd mat(i,j);
mat += 1.0;

(MATLABでこの種のことに慣れていると、Eigenが今よりもさらに使いやすくなります。これを行う組み込みメソッドがどこかにあるのではないかと思います。)

この質問のサブ質問は、マトリックス要素のブロックを設定値に設定する方法です。

mat.block(i,j,k,l) = 1.0;
13
andyras

よくあることですが、質問を投稿してから30秒以内にドキュメントで回答を見つけました。 Constant function を探していました:

Eigen::MatrixXd mat = Eigen::MatrixXd::Constant(i, j, 1.0);

mat.block(i,j,k,l) = Eigen::MatrixXd::Constant(i, j, 1.0);
20
andyras

Eigen::MatrixXd::Ones()Eigen::MatrixXd::Zero()およびEigen::MatrixXd::Random()はすべて動的にマトリックスを作成し、必要なものを提供します。

8
Jake0x32