Eigen MatrixXd Push in C ++

8

Eigen ist eine bekannte Matrixbibliothek in c ++. Ich habe Probleme, eine eingebaute Funktion zu finden, um ein Element einfach an das Ende einer Matrix zu schieben. Derzeit weiß ich, dass es so gemacht werden kann:

%Vor%

Und das wird funktionieren ( einige der Syntax möglicherweise out ). Aber es ist ziemlich kompliziert für eine einfache Sache zu tun. Gibt es bereits eine integrierte Funktion?

    
Fantastic Mr Fox 02.01.2013, 23:09
quelle

2 Antworten

13

Es gibt keine solche Funktion für Eigenmatrizen. Der Grund dafür ist, dass eine solche Funktion entweder sehr langsam ist oder übermäßigen Speicher verbraucht.

Damit eine push_back -Funktion nicht zu teuer ist, muss sie die Kapazität der Matrix um einen Faktor erhöhen, wenn der Speicherplatz nicht mehr ausreicht. Im Umgang mit Matrizen ist die Speichernutzung jedoch häufig ein Problem, so dass die Kapazität einer Matrix größer als notwendig sein kann. Wenn es stattdessen die Größe um rows() oder cols() erhöht, wäre die Operation O(n*m) . Würde man dies tun, um eine ganze Matrix zu füllen, wäre O(n*n*m*m) , was für Matrizen mit moderater Größe ziemlich langsam wäre.

Zusätzlich sind in der linearen Algebra die Matrix- und Vektorgrößen fast immer konstant und vorher bekannt. Wenn Sie die Größe einer Matrix ändern, interessieren Sie sich oft nicht für die vorherigen Werte in der Matrix. Dies ist der Grund, warum Eigen% %%%%% Funktion nicht alte Werte behält, im Gegensatz zu resize %% s%.

Der einzige Fall, an den ich denken kann, wo Sie die Größe der Matrix vorher nicht wissen würden, ist beim Lesen aus einer Datei. In diesem Fall würde ich entweder zuerst die Daten in einen Standardcontainer wie std::vector mit resize laden und dann in eine bereits große Matrix kopieren, oder wenn der Speicher knapp ist, die Datei einmal durchlaufen, um die Größe zu erhalten, und dann a zweites Mal, um die Werte zu kopieren.

    
David Brown 03.01.2013, 00:59
quelle
7

Es gibt keine solche Funktion, aber Sie können so etwas selbst bauen:

%Vor%

Wenn dies jedoch zu viele Größenänderungen erfordert, wird es schrecklich langsam.

    
Yuushi 03.01.2013 01:10
quelle

Tags und Links