Performance 有效地构造两个向量之间的减法核矩阵
给定X=(X_1,…,X_m),Y=(Y_1,…,Y_n),如何高效地构造m×n矩阵K?不为循环使用? 矩阵K的(i,j)元素为1/(x_i-y_j)Performance 有效地构造两个向量之间的减法核矩阵,performance,matlab,matrix,vectorization,Performance,Matlab,Matrix,Vectorization,给定X=(X_1,…,X_m),Y=(Y_1,…,Y_n),如何高效地构造m×n矩阵K?不为循环使用? 矩阵K的(i,j)元素为1/(x_i-y_j) 在我看来,逐行构造是不够有效的。创建一个2D矩阵,用Y的每个元素减去X的每个元素。这可以通过使用和@减号函数句柄以矢量化方式完成,以处理减法运算。然后使用元素除法将1除以每个2D矩阵元素。这两个步骤可以在一行中执行,以获得所需的输出,如下所示- K = 1./bsxfun(@minus,X(:),Y(:).') 创建一个二维矩阵,其中包含Y的每
在我看来,逐行构造是不够有效的。创建一个2D矩阵,用
Y
的每个元素减去X
的每个元素。这可以通过使用和@减号函数句柄以矢量化方式完成,以处理减法运算。然后使用元素除法将1
除以每个2D矩阵元素。这两个步骤可以在一行中执行,以获得所需的输出,如下所示-
K = 1./bsxfun(@minus,X(:),Y(:).')
创建一个二维矩阵,其中包含Y
的每个元素与X
的每个元素的减法。这可以通过使用和@减号函数句柄以矢量化方式完成,以处理减法运算。然后使用元素除法将1
除以每个2D矩阵元素。这两个步骤可以在一行中执行,以获得所需的输出,如下所示-
K = 1./bsxfun(@minus,X(:),Y(:).')
结合这两个步骤是否更好,即K=bsxfun(@(x,y)1/(x-y),x,y')
?不,它比您的代码慢60%。使用慢速Chromebook检查。@Yvon这不是因为@减号是内置版本之一,因此我猜它是一个优化版本。将这两个步骤结合起来是否更好,即K=bsxfun(@(x,y)1/(x-y),x,y')
?不。它比您的代码慢60%。使用慢速Chromebook检查。@Yvon这不是因为@减号是内置版本之一,因此我猜是一个优化版本。