2017-06-06 2 views
1

J'ai besoin de calculer le log10 d'un Vector3f. J'ai essayé:log10 d'un Vector3f (Eigen Libs)

Eigen::Vector3f valsingn = svd.singularValues()/svd.singularValues()(0); 
valsingn = valsingn.log10(); 

Mais cela ne fonctionne pas.

main.cpp:145:27: error: ‘Eigen::Vector3f {aka class Eigen::Matrix<float, 3, 1>}’ has no member named ‘log10’; did you mean ‘log’? 
    valsingn = valsingn.log10(); 

Est-il possible de calculer le log10 avec ce vecteur?

Merci!

Répondre

2

La façon simple qui permettrait Eigen d'utiliser encore SIMD (je suppose qu'il est activé) serait de faire un simple changement de bases:

valsingn = valsingn.array().log()/log(10.0); 

Vous pouvez passer log10 comme une expression unaire:

valsingn.unaryExpr(&log10); // You may have to wrap 
          // log10 in a function of 
          // your own depending on 
          // the log10 overloads 
1

Vous devez passer à la array world pour les fonctions pure sage coefficient:

Vector3f v, w; 
w = v.array().log10(); 
w = log10(v.array()); 
Arrayt3f a, b; 
b = a.log10(); 
b = log10(a); 
+0

Est-ce que ceci compile pour vous? Quelle version d'Eigen utilisez-vous? Dans quel fichier est défini 'log10'? – m7913d

+1

@ m7913d 'log10' a été ajouté dans Eigen 3.3. –

+0

@ggael Y a-t-il un SIMD 'log10'? Il n'est pas listé dans la [dox] (http://eigen.tuxfamily.org/dox/group__CoeffwiseMathFunctions.html). –