2017-05-21 1 views
0

Savez-vous pourquoi je ne peux pas stocker dans un double le résultat d'une multiplication vectorielle?Renvoie le double de la multiplication vectorielle avec Armadillo C++

double A = rowvec({1,3,4})*vec({5,6,7}); 

Il donne « aucune fonction de conversion appropriée de "const arma :: colle" ... à "const double" existe.

encore que la multiplication des vecteurs de la matrice donne une double. Comment puis-je obtenir autour?

Merci!

+1

Utilisez [as_scalar0] (http://arma.sourceforge.net/docs.html#as_scalar) pour convertir une matrice 1x1 en scalaire. Par exemple: 'double A = as_scalar (rowvec ({1,3,4}) * vec ({5,6,7}));' – hbrerkere

Répondre

0

le résultat du produit est un modèle d'expression appelé arma::Glue qui peut être converti en une matrice 1x1. pour ce faire, en ligne et l'associer à une double évaluation en utilisant explicitement .eval() et prenez le seul élément qui est (0,0).

#include <armadillo> 

int main() { 
    using arma::rowvec; 
    using arma::vec; 
    double A = (rowvec({1,3,4})*vec({5,6,7})).eval()(0,0); 
}; 

N.B. .: Voulez-vous dire dot(a,b)?

#include <armadillo> 

int main() { 
    using arma::rowvec; 
    using arma::vec; 
    using arma::dot; 
    double A = dot(rowvec({1,3,4}), vec({5,6,7})); 
}; 
+2

Il est préférable d'utiliser [as_scalar()] (http: // arma. sourceforge.net/docs.html#as_scalar) dans ce cas. L'utilisation de [.eval()] (http://arma.sourceforge.net/docs.html#eval_member) n'est pas vraiment recommandée car elle peut dégrader les performances. – hbrerkere