2017-06-06 5 views
0

Ich versuche die EIGEN libs zu verwenden. Insbesondere benutze ich die SVD.Eigen SVD Double Cast

Nach der Berechnung der Singulärwerte I diese Operation ausführen müssen:

svd.singularValues()/svd.singularValues().row(1) 

, die einen Vektor mit einem Skalar getaucht ist.

Meine Fragen sind:

1) Warum diese Operation gibt mir:

main.cpp:149:56: error: no match for ‘operator/’ (operand types are ‘const SingularValuesType {aka const Eigen::Matrix}’ and ‘Eigen::DenseBase >::ConstRowXpr {aka const Eigen::Block, 1, 1, false>}’)

2) Wie kann ich die in svd.singularValues().row(1) in Standard "double" Variable enthaltenen Werte zu kopieren?

Antwort

1

Beachten Sie, dass svd.singularValues().row(1) keine skalare, sondern eine 1x1 Matrix ist, weshalb Ihr Code nicht kompiliert wird. Lösung:

svd.singularValues()/svd.singularValues()(1) 

und auch beachten, dass wie üblich in C/C++, Eigen Matrizen und Vektoren 0-basiert sind indiziert, wenn Sie also von den größten Einzelwerten normalisieren wollen, sollten Sie tun:

svd.singularValues()/svd.singularValues()(0)