E 'piuttosto un compito semplice, ma non è stato in grado di trovare una risposta ad esso:colonna Append alla matrice, utilizzando Eigen libreria
Utilizzando la libreria Eigen, supponiamo di avere Matrix2Xd mat
e Vector2d vec
, dove
mat = 1 1 1
1 1 1
vec = 2 2
Ora ho bisogno di qualcosa come mat.addCol(vec)
tale che dopo
mat = 1 1 1 2
1 1 1 2
Qual è il modo migliore (più semplice) per raggiungere questo obiettivo?
Si noti che questo non è un duplicato di How do you make a matrix out of vectors in eigen?. Non voglio inizializzare la matrice ma aggiungerne una esistente. O forse c'è un trucco, come usare l'inizializzazione della virgola in questo caso? Il seguente codice fallirà:
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: I seguenti lavori, ma non mi piace la necessità di una variabile temporanea per un compito così semplice. C'è un modo migliore?
Matrix2Xd tmp(2, mat.cols()+1);
tmp << mat, vec;
mat = tmp;
hai letto la prima risposta della vittima: "La matrice m mus sono stati correttamente ridimensionata prima."? Una matrice Eigen ha una funzione ['ridimensiona'] (http://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#afbbb33d14fe7fb9683019a39ce1c659d) membro ... La documentazione può essere cercata, o letta, almeno. – rubenvb
@rubenvb 'resize' non mantiene il contenuto della matrice. Se eseguo 'mat.resize (2, mat.cols() + 1);', la matrice viene riempita con alcuni valori casuali in seguito. – luator
Quindi dovrai creare un temporaneo o inizializzarlo alla dimensione corretta. – rubenvb