【发布时间】: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
给定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
从X 的每个元素中减去Y 的每个元素,创建一个二维矩阵。这可以使用带有@minus 函数句柄的bsxfun 以矢量化方式完成,以处理减法。然后使用elementwise-division 将1 除以每个二维矩阵元素。这两个步骤可以在一行中执行,从而为我们提供所需的输出,如下所示 -
K = 1./bsxfun(@minus,X(:),Y(:).')
【讨论】:
K = bsxfun(@(x,y) 1/(x-y), X, Y')?
@minus 是内置的之一,因此我猜它是一个优化版本。