Es ist eine ziemlich einfache Aufgabe, aber ich war nicht in der Lage eine Antwort darauf zu finden:Anfügen Spalte zur Matrix, mit Eigen-Bibliothek
die Eigen-Bibliothek verwenden, nehme ich Matrix2Xd mat
und Vector2d vec
, wo
mat = 1 1 1
1 1 1
vec = 2 2
Jetzt brauche ich so etwas wie mat.addCol(vec)
, so dass danach
mat = 1 1 1 2
1 1 1 2
Was ist der beste (einfachste) Weg, dies zu erreichen? Bitte beachten Sie, dass dies kein Duplikat von How do you make a matrix out of vectors in eigen? ist. Ich möchte nicht zuerst die Matrix konstruieren, sondern an eine bestehende anhängen. Oder gibt es vielleicht einen Trick, wie man in diesem Fall die Komma-Initialisierung benutzt? Der folgende Code wird fehlschlagen:
Matrix2Xd mat(2,3);
Vector2d vec;
mat << 1, 1, 1, 1, 1, 1;
vec << 2, 2;
cout << mat << endl;
mat << vec; // <-- crashes here
cout << mat << endl;
Edit: Folgende Arbeiten, aber ich weiß nicht, wie die Notwendigkeit einer temporären Variablen für eine solche grundlegende Aufgabe. Gibt es einen besseren Weg?
Matrix2Xd tmp(2, mat.cols()+1);
tmp << mat, vec;
mat = tmp;
Sie die erste Antwort in der Betrogene gelesen haben: "Die Matrix m Mus richtig erste Größe verändert wurde."? Eine Eigenmatrix hat eine ['resize'] (http://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#afbbb33d14fe7fb9683019a39ce1c659d) Elementfunktion ... Die Dokumentation kann gegoogelt oder zumindest gelesen werden. – rubenvb
@rubenvb 'resize' behält den Inhalt der Matrix nicht bei. Wenn ich 'mat.resize (2, mat.cols() + 1);' mache, wird die Matrix danach mit einigen zufälligen Werten gefüllt. – luator
Dann müssen Sie entweder ein temporäres erstellen oder es auf die richtige Größe initialisieren. – rubenvb