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

时间:2015-03-18 22:43:02

标签: arrays algorithm matlab vector vectorization

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

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

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

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

1 个答案:

答案 0 :(得分:6)

您可以在此使用高效的bsxfun,通过将expansionsa的{​​{1}}调整为b的大小来避免循环,然后执行{ {1}}引擎盖下。因此,它提出了一种矢量化方法来实现所需的结果。这是代码 -

117x489x489

elementwise subtraction result = bsxfun(@minus,a(:),permute(b,[3 1 2])) (:)a b有助于根据需要分别为singleton dimensionsa创建bbsxfun进行各自的扩展。


你可以避免使用某些permute permute,因为 - {/ p>

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