Jest to dość proste zadanie, ale nie był w stanie znaleźć odpowiedź na to:kolumna Dołącz do Matrix, stosując Eigen bibliotekę
wykorzystaniem biblioteki EIGEN załóżmy, że mam Matrix2Xd mat
i Vector2d vec
, gdzie
mat = 1 1 1
1 1 1
vec = 2 2
teraz muszę coś podobnego mat.addCol(vec)
tak że potem
mat = 1 1 1 2
1 1 1 2
Jaki jest najlepszy (najprostszy) sposób, aby osiągnąć ten cel?
Należy pamiętać, że nie jest to duplikat numeru How do you make a matrix out of vectors in eigen?. Nie chcę inicjować konstrukcji macierzy, ale dołącz do istniejącej. A może jest jakaś sztuczka, jak użyć w tym przypadku inicjalizacji przecinkiem? Poniższy kod nie powiedzie:
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;
Edycja: następujące prace, ale nie podoba mi się konieczność zmiennej tymczasowej dla takiego podstawowego zadania. Czy istnieje lepszy sposób?
Matrix2Xd tmp(2, mat.cols()+1);
tmp << mat, vec;
mat = tmp;
można było odczytać pierwszą odpowiedź w dupe: „Matryca m mus zostały odpowiednio przeskalowane w pierwszej kolejności.”? Macierz Eigen ma funkcję składową ['resize'] (http://eigen.tuxfamily.org/dox/classEigen_1_1PlainObjectBase.html#afbbb33d14fe7fb9683019a39ce1c659d) ... Dokumentację można przeglądać lub czytać przynajmniej. – rubenvb
@rubenvb 'resize' nie zachowuje zawartości macierzy. Jeśli zrobię 'mat.resize (2, mat.cols() + 1);', macierz jest wypełniona później pewnymi losowymi wartościami. – luator
Następnie musisz utworzyć tymczasowy lub zainicjować go do prawidłowego rozmiaru. – rubenvb