2017-10-03 3 views
1

私はArmadillo for C++を使用しようとしています。Armadilloでnxn Unityマトリックスを作成するには?

arma::mat UnityMatrix = arma:mat(5,5,fill::zeros) 
for (int ii = 0; ii < UnityMatrix.n_rows;ii++){ 
for (int jj = 0; jj < UnityMatrix.n_cols;jj++){ 
    if (ii==jj){ 
    UnityMatrix(ii,jj)=1; 
    } 
} 

} 私がゼロのマトリックスを作成し、対角線上のものを追加:私は仕事にそれを得たArmadillo Link

シンプルかつ遅い方法だった:私は、参考のためにサイトを使用しています。これはうまくいきますが、アルマジロでこれを行うより効率的な方法があると確信しています。

アルマジロはユニタリであるべきumatタイプを持っていますが、使用方法を理解できません。

私が試した:私はランダムな値の5×5の行列を与えた

arma::umat InitM; 
InitM.set_size(5,5); 

を。

私は他の方法で初期化を試みましたが、コンパイルできませんでした。

これは基本的なので、私はオンラインの例は見つけられませんが、まだそれを理解することはできません。

+0

私は転記直後に答えを見つけました。しかしそれは別の疑問をもたらす。私が使用しようとしていたumatタイプは何ですか?また、いつ使用しますか? – MichaelE

+0

明確にするために、「統一」マトリックスのようなものはありません。 [単位行列](https://en.wikipedia.org/wiki/Identity_matrix)があります。単位行列と呼ばれることもあります。これは、単位行列とは異なる[unitary matrix](https://en.wikipedia.org/wiki/Unitary_matrix)と混同してはいけません。 – mtall

答えて

0

identity matrixが最初の例のunit matrixではないようです。前者を希望する場合は、Claes Rolenの提案通りにarma::eye<arma::umat>()を参照してください。後者については、自分の返信を参照してください。

あなたのコメントの1つの質問では、umatは、タイプuwordのunsigned intの行列です。

0

この質問を投稿した直後に見つかりました。コードはです。

arma::mat UnityMatrix = arma:mat(5,5,fill::eye) 

fill :: eyeがキーです。私は最終的にユニティ行列ではなく、アイデンティティ行列を検索しました。

+1

もう一つの方法は 'arma :: mat UnityMatrix; UnityMatrix.eye(5,5); ' –

関連する問題