Вернуть удвоение из векторного умножения с Armadillo C++

Знаете ли вы, почему я не могу сохранить в два раза результат умножения вектора?

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

Он не дает "подходящей функции преобразования из"const arma::Glue"... в" const double ".

Тем не менее, умножение матричного вектора дает двойное число. Как я могу обойти?

Спасибо!

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);
};

NB: Вы имели в виду 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}));
};
Другие вопросы по тегам