Wenn Sie zu this Eigen page gehen, können Sie VectorXd
Objekte mit dem Operator <<
initialisieren. Sie können auch einige Vektorobjekte in ein großes VectorXd
-Objekt ablegen (sehen Sie sich zum Beispiel das dritte Beispiel im Abschnitt "Der Komma-Initialisierer" an).Zusammenfassen einer Sammlung von `Eigen :: VectorXd`s zu einem großen` Eigenen :: VectorXd`
Ich möchte ein paar Vektoren in einen großen Vektor ablegen, aber es fällt mir schwer, Code zu schreiben, der für eine beliebig große Sammlung von Vektoren funktioniert. Das Folgende funktioniert nicht, und es fällt mir schwer, es so zu schreiben (das ist kein Doppel für die Schleife). Irgendwelche Vorschläge?
#include <iostream>
#include <Eigen/Dense>
#include <vector>
int main(int argc, char **argv)
{
// make some random VectorXds
std::vector<Eigen::VectorXd> vOfV;
Eigen::VectorXd first(3);
Eigen::VectorXd second(4);
first << 1,2,3;
second << 4,5,6,7;
vOfV.push_back(first);
vOfV.push_back(second);
// here is the problem
Eigen::VectorXd flattened(7);
for(int i = 0; i < vOfV.size(); ++i)
flattened << vOfV[i];
//shows that this doesn't work
for(int i = 0; i < 7; ++i)
std::cout << flattened(i) << "\n";
return 0;
}
Sie brauchen ein bisschen vorsichtig mit Ihrer Benennung sein. Ein "Eigenvektor" ist ein mathematischer Begriff (etwas, das einen linearen Operator nur skaliert passiert) –
@ MarcusMüller gerade bearbeitet. hoffentlich hilft das – Taylor
Das ist definitiv falsch: 'i << vOfV.size()' –