【问题标题】:Translating Matlab's bsxfun to Eigen将 Matlab 的 bsxfun 转换为 Eigen
【发布时间】:2016-05-12 05:02:31
【问题描述】:

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

bsxfun(@times, a, A)

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

我正在努力

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

并希望 Eigen 的惰性求值能提高效率。

谢谢!

【问题讨论】:

    标签: c++ matlab eigen eigen3


    【解决方案1】:

    你可以这样做:

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

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

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

    M = a.asDiagonal() * A;
    

    在这两种情况下,由于惰性评估,您不会得到任何临时结果。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多