1

你知道为什么我不能将向量乘法的结果存储为双倍吗?

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

它给出了“不存在从“const arma::Glue”到“const double”的合适转换函数。

矩阵向量乘法仍然是双倍的。我怎样才能绕过?

谢谢!

4

1 回答 1

1

乘积的结果是一个表达式模板,调用arma::Glue它可以转换为一个 1x1 矩阵。要内联执行此操作并将其分配给双重评估,使用显式使用.eval()并获取唯一的元素 (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);
};

注意:你的意思是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}));
};
于 2017-05-22T01:07:03.813 回答