Ver*_*ian 2 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
Run Code Online (Sandbox Code Playgroud)
你可以bsxfun在这里使用有效的方法来避免循环,通过做expansions两者a和b大小,117x489x489然后elementwise subtraction在引擎盖下执行.因此,它提出了一种矢量化方法来实现所需的结果.这是代码 -
result = bsxfun(@minus,a(:),permute(b,[3 1 2]))
Run Code Online (Sandbox Code Playgroud)
这(:)与a和permute用b在创造有助于singleton dimensions为a和b根据需要与它们各自的扩张分别bsxfun.
你可以避免permute有一些reshaping像这样的 -
result = reshape(bsxfun(@minus,a(:),b(:).'),[numel(a) size(b)])
Run Code Online (Sandbox Code Playgroud)