2017-06-06 2 views
0

J'essaie d'utiliser les bibliothèques EIGEN. En particulier, j'utilise le SVD.Eigen SVD Double Cast

Après le calcul des valeurs singulières dont j'ai besoin d'effectuer cette opération:

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

qui est un vecteur par un scalaire plongé.

Mes questions sont les suivantes:

1) Pourquoi cette opération me donne:

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) Comment puis-je copier les valeurs contenues dans svd.singularValues().row(1) dans la variable standard "double"?

Répondre

1

Notez que svd.singularValues().row(1) n'est pas une matrice scalaire mais une matrice 1x1, ce qui explique pourquoi votre code ne compile pas. Solution:

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

et aussi noter que, comme d'habitude en C/C++, les matrices de Eigen et des vecteurs sont indexés en fonction 0, donc si vous voulez normaliser les plus grandes valeurs singulières que vous devriez faire:

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