2017-10-03 4 views
1

Ich versuche Armadillo für C++ zu verwenden. Ich bin mit dem Ort als Referenz: Armadillo LinkWie erstellt man eine nxn Unity Matrix in Armadillo?

Die einfache und langsame Art, wie ich es an die Arbeit bekam, war:

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; 
    } 
} 

} ich eine Matrix von Nullen zu erstellen, und fügen Sie Einsen auf der Diagonalen. Das funktioniert, aber ich bin mir sicher, dass es in Armadillo einen viel effizienteren Weg gibt.

Armadillo hat den Umat-Typ, der Einheit sein sollte, aber ich kann nicht herausfinden, wie man es benutzt.

Ich habe versucht:

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

Was mich eine 5x5-Matrix von Zufallswerten gab.

Wenn ich andere Möglichkeiten der Initialisierung versucht, aber keiner würde kompilieren.

Dies scheint so einfach, dass ich keine Online-Beispiele finden kann, aber immer noch nicht herausfinden kann.

+0

Ich fand die Antwort gleich nach dem Posten. Aber das bringt eine andere Frage. Was ist der Umat-Typ, den ich verwenden wollte und wann würde ich ihn verwenden? – MichaelE

+0

Um es klar zu sagen, es gibt keine "Einheitsmatrix". Es gibt die [Identitätsmatrix] (https://en.wikipedia.org/wiki/Identity_matrix), die manchmal als eine Einheitsmatrix bekannt ist. Dies ist nicht zu verwechseln mit einer [unitären Matrix] (https://en.wikipedia.org/wiki/Unitary_matrix), die sich von der Identitätsmatrix unterscheidet. – mtall

Antwort

0

Es scheint, als ob Sie ein identity matrix und nicht ein unit matrix von Ihrem ersten Beispiel wollen. Wenn Sie das ehemalige wollen, sehen Sie die arma::eye<arma::umat>() wie von Claes Rolen vorgeschlagen. Für Letzteres, sehen Sie Ihre eigene Antwort.

Wie für die Frage in einem Ihrer Kommentare ist umat eine Matrix mit Typ uword, d. H. Unsigned int.

0

Ich fand es direkt nach dem Posten dieser Frage. Der Code ist.

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

Mit füllen :: Auge ist der Schlüssel. Ich habe es endlich gefunden, als ich nach Identity Matrix und nicht nach Unity Matrix gesucht habe.

+1

Eine Alternative ist die Verwendung von 'arma :: mat UnityMatrix; UnityMatrix.eye (5,5); ' –

Verwandte Themen