MATLAB 如何摆脱两个数组相减的循环

MATLAB How to get rid of loop for subtracting two arrays

我试图在 MATLAB 中减去两个不同大小的数组,我目前正在使用 for 循环,这需要很长时间。 有什么办法可以使下面的代码更快?我想知道是否可以在没有 for 循环的情况下以某种方式快速创建一个 117x489x489 的数组。

第一个数组 a 的尺寸为 1x117,第二个数组 b 的尺寸为 489x489。 结果矩阵的尺寸为 117x489x489。

下面是我如何减去两个数组:

for i = 1:length(a)
  result(i) = a(i) - b;
end

你可以在这里使用有效的 bsxfun 来避免循环,方法是将 abexpansions 都做成 117x489x489 的大小,然后在后台执行 elementwise subtraction。因此,它提出了一种矢量化方法来实现预期的结果。这是代码 -

result = bsxfun(@minus,a(:),permute(b,[3 1 2]))

(:)apermuteb 有助于分别为 ab 创建 singleton dimensions根据需要使用 bsxfun.

进行各自的扩展

你可以像这样避免 permute 和一些 reshaping -

result = reshape(bsxfun(@minus,a(:),b(:).'),[numel(a) size(b)])