我试图在不同大小的MATLAB中减去两个数组,我目前正在使用for循环,这需要很长时间。 有没有办法让下面的代码更快?我想知道是否可以在没有for循环的情况下以某种方式快速创建一个117x489x489的数组。
第一个数组a的尺寸为1x117,第二个数组b的尺寸为489x489。 结果矩阵的尺寸为117x489x489。
以下是我如何减去两个数组:
for i = 1:length(a)
result(i) = a(i) - b;
end
答案 0 :(得分:6)
您可以在此使用高效的bsxfun
,通过将expansions
和a
的{{1}}调整为b
的大小来避免循环,然后执行{ {1}}引擎盖下。因此,它提出了一种矢量化方法来实现所需的结果。这是代码 -
117x489x489
elementwise subtraction
result = bsxfun(@minus,a(:),permute(b,[3 1 2]))
(:)
和a
b
有助于根据需要分别为singleton dimensions
和a
创建b
用bsxfun
进行各自的扩展。
你可以避免使用某些permute
permute
,因为 - {/ p>
result = reshape(bsxfun(@minus,a(:),b(:).'),[numel(a) size(b)])