c++ - 将 Matlab 的 bsxfun 转换为 Eigen

标签 c++ matlab eigen eigen3

假设我们有一个 MxN 维的矩阵 A 和一个 Mx1 维的 vector a。在 Matlab 中,要将 'a' 与 'A' 的所有列相乘,我们可以这样做

bsxfun(@times, a, A)

Eigen 中是否有等效的方法,而不必遍历矩阵的列?

我正在努力

M = bsxfun(@times, a, A) + bsxfun(@times, a2, A2)

并希望 Eigen 的惰性求值能够使其更加高效。

谢谢!

最佳答案

你可以这样做:

M = A.array().colwise()*a.array();

.array()需要将 operator* 的语义重新定义为系数乘积(如果 A 和 a 是 Array<> 对象则不需要)。

在这种特殊情况下,最好将其写为缩放操作:

M = a.asDiagonal() * A;

在这两种情况下,由于惰性求值,您都不会得到任何临时值。

关于c++ - 将 Matlab 的 bsxfun 转换为 Eigen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177663/

相关文章:

c++ - 一维数组是否比 Eigen 动态 vector 快?

matlab - 是否有编写 matlab 文件开头注释的标准?

matlab - 在 MATLAB 中编译 C 文件

linear-algebra - 在 Eigen 中分配稀疏矩阵

iphone - 解析 OBJ 文件

c++ - 如何释放字符串未使用的容量

c++ - 为指向两个不同类的指针重载赋值运算符

c++ - 字符串和函数对象

matlab - 查找一对值出现的次数

c++ - 如何在 Eigen 中翻译矩阵(4x4)?