gpt4 book ai didi

c++ - 使用 Eigen C++ 库将每个矩阵列乘以每个 vector 元素

转载 作者:可可西里 更新时间:2023-11-01 16:26:16 25 4
gpt4 key购买 nike

我需要使用 Eigen C++ library 将每个矩阵列乘以每个 vector 元素.我尝试了 colwise 没有成功。

示例数据:

Eigen::Matrix3Xf A(3,2); //3x2
A << 1 2,
2 2,
3 5;

Eigen::Vector3f V = Eigen::Vector3f(2, 3);

//Expected result
C = A.colwise()*V;

//C
//2 6,
//4 6,
//6 15
//this means C 1st col by V first element and C 2nd col by V 2nd element.

矩阵A可以有3xN和V Nx1。含义(列 x 行)。

最佳答案

这是我会做的:

代码

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 的数组 View 上进行 colwise 恶作剧。

如果你想计算两个 vector 的元素乘积(最酷的酷猫称之为 Hadamard Product ),你可以这样做

Eigen::Vector3f a = ...;
Eigen::Vector3f b = ...;
Eigen::Vector3f elementwise_product = a.array() * b.array();

这就是上面的代码在按列方式执行的操作。

编辑:

要解决行大小写问题,您可以使用 .rowwise(),并且您需要额外的 transpose() 来调整

Eigen::Matrix<float, 3, 2> A;  // 3x2
A << 1, 2, 2, 2, 3, 5;

Eigen::Vector2f V = Eigen::Vector2f(2, 3);

// Expected result
Eigen::Matrix<float, 3, 2> C = A.array().rowwise() * V.transpose().array();
std::cout << C << std::endl;

示例输出:

 2  6
4 6
6 15

关于c++ - 使用 Eigen C++ 库将每个矩阵列乘以每个 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42935944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com