这就是我要做的:
码
Eigen::Matrix3Xf A(3, 2); // 3x2
A << 1, 2, 2, 2, 3, 5;
Eigen::Vector3f V = Eigen::Vector3f(1, 2, 3);
const Eigen::Matrix3Xf C = A.array().colwise() * V.array();
std::cout << C << std::endl;
输出示例:
1 2
4 4
9 15
说明
你很接近,诀窍是使用.array()进行广播乘法.
colwiseReturnType没有.array()方法,因此我们必须在A的数组视图上执行colwise shenanigans.
如果你想计算两个向量的元素乘积(最酷的酷猫称之为Hadamard Product),你可以做
Eigen::Vector3f a = ...;
Eigen::Vector3f b = ...;
Eigen::Vector3f elementwise_product = a.array() * b.array();
这是上述代码正在以列方式进行的操作.
编辑:
要解决行情况,你可以使用.rowwise(),你需要一个额外的transpose()来使事情适合
Eigen::Matrix A; // 3x2
A << 1, 2, 2, 2, 3, 5;
Eigen::Vector2f V = Eigen::Vector2f(2, 3);
// Expected result
Eigen::Matrix C = A.array().rowwise() * V.transpose().array();
std::cout << C << std::endl;
输出示例:
2 6
4 6
6 15