我在制作动态矩阵和矢量点积时遇到麻烦,而且令人惊讶的是,由于Eigen
是一个流行的库,我没有找到任何解决方案。
所以代码非常简单:
int k = 3;
MatrixXd m;
m.resize(k, k);
ArrayXd a;
a.resize(k);
std::cout << "Dot product: " << m*a << std::endl;
我遇到错误
对二进制表达式无效的操作数(“ MatrixXd”(又名“ Matrix”)和“ ArrayXd”(又名“ Array”)) std :: cout <<“点积:” << m * a << std :: endl;
我对进行动态矩阵和向量乘法是否可行感到困惑。同时,我发现对于向量和矩阵有.dot()
方法,因此对点积使用*
或.dot()
是哪个方法?
答案 0 :(得分:1)
您需要矩阵,而不是矩阵和数组的混合。您需要使用a
将.matrix()
转换为数组(这是一个视图,没有额外的计算成本)。
尝试:
std::cout << "Dot product: " << m*a.matrix() << std::endl;