矩阵中的内积两行C++与特征

inner product two rows in matrix C++ with Eigen

本文关键字:两行 C++ 特征      更新时间:2023-10-16

我想做一个内部产品,如下所示。 矩阵Xd a= [1,2,3,4] 矩阵Xd b= [1,2,3,4]

a*b = [1,4,9,16] <=> c[i] = a[i]*b[i].

如何使用Eigen MatrixXd做到这一点?

谢谢。

你描述的是一个元素乘积("内积"通常是指点积(。您可以编写:

a.cwiseProduct(b);
// or
a.array() * b.array();

但是,如果您主要使用元素级操作,则应将ab声明为Array

Eigen::ArrayXd a{{1,2,3,4}}, b{{1,2,3,4}}; // {}-initialization requires C++11, and the development branch of Eigen
Eigen::ArrayXd c = a*b;

神弩箭演示:https://godbolt.org/z/BDprOz

可以使用.asDiagonal()成员函数来实现这一点:

c = a.asDiagonal() * b;

在这种情况下,c是由对角矩阵的矩阵-向量积产生的向量,该矩阵包含向量a的元素与向量b。术语"向量"可互换用于描述一维矩阵。

https://godbolt.org/z/9DsLj8

这里假设b是列向量MatrixXd b(4,1)。如果它是一个行向量MatrixXd b(1,4)则可以改用a.asDiagonal() * b.transpose()

我预计此选项与@chtz建议的解决方案在性能方面不会有任何显着差异。