(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;
よくあることですが、質問を投稿してから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);
Eigen::MatrixXd::Ones()
、Eigen::MatrixXd::Zero()
およびEigen::MatrixXd::Random()
はすべて動的にマトリックスを作成し、必要なものを提供します。