【问题标题】:Constructing kernel matrix of subtractions between two vectors efficiently有效地构造两个向量之间减法的核矩阵
【发布时间】:2014-07-26 19:20:21
【问题描述】:

给定X = ( x_1,...,x_m ), Y = ( y_1,...,y_n ),如何有效地构造m×n矩阵K?不使用 for 循环? 矩阵K的(i,j)元素为1/(x_i-y_j)。

在我看来,逐行构造效率不够。

【问题讨论】:

    标签: performance matlab matrix vectorization


    【解决方案1】:

    X 的每个元素中减去Y 的每个元素,创建一个二维矩阵。这可以使用带有@minus 函数句柄的bsxfun 以矢量化方式完成,以处理减法。然后使用elementwise-division1 除以每个二维矩阵元素。这两个步骤可以在一行中执行,从而为我们提供所需的输出,如下所示 -

    K = 1./bsxfun(@minus,X(:),Y(:).')
    

    【讨论】:

    • 将这两个步骤结合起来会更好吗,即K = bsxfun(@(x,y) 1/(x-y), X, Y')
    • 没有。它比您的代码慢 60%。使用慢速 Chromebook 进行检查。
    • @Yvon 这不是因为@minus 是内置的之一,因此我猜它是一个优化版本。
    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多