2017-05-21 3 views
0

ベクトル乗算の結果を2倍に格納できない理由が分かりますか?アルマジロC++でベクタ乗算を2倍に戻す

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

これは、constのARMA ::グルー「からの、適切な変換機能を 『与えない』 ...に 『constのダブル』が存在する。

まだその行列ベクトル乗算は、二重を与えます。 私はどのように取得することができます周り?

ありがとうございました!

+1

使用[as_scalar0(http://arma.sourceforge.net/docs.html#as_scalar)スカラーに1x1の行列を変換します。例: 'double A = as_scalar(rowvec(1,3,4))* vec({5,6,7})); – hbrerkere

答えて

0

積の結果は、1x1の行列に変換することができarma::Glueと呼ばれる式テンプレートです。このインラインを行うと、二重のを使用して明示的に評価することを割り当てるにはであり、唯一の要素は(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:あなたは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

[as_scalar()](http:// arma。 sourceforge.net/docs.html#as_scalar)を使用します。 [.eval()](http://arma.sourceforge.net/docs.html#eval_member)の使用は、パフォーマンスを低下させる可能性があるため、実際には推奨されません。 – hbrerkere