Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays MATLAB如何消除两个阵列相减的环路_Arrays_Algorithm_Matlab_Vector_Vectorization - Fatal编程技术网

Arrays MATLAB如何消除两个阵列相减的环路

Arrays MATLAB如何消除两个阵列相减的环路,arrays,algorithm,matlab,vector,vectorization,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 您可以在此处使用高效,通过将a和b扩展到117x489x489

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

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

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

for i = 1:length(a)
  result(i) = a(i) - b;
end
您可以在此处使用高效,通过将
a
b
扩展到
117x489x489
的大小,然后在引擎盖下执行
元素减法,从而避免循环。因此,它提出了一种矢量化的方法来实现预期的结果。这是密码-

result = bsxfun(@minus,a(:),permute(b,[3 1 2]))
使用
a
b
(:)
有助于分别为
a
b
创建
单态维度,以满足它们各自使用
bsxfun
进行扩展的需要


你可以用类似的方法避免
permute
-

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

为什么要避免
排列
?置换是否比重塑要慢得多?@kkuilla是的,从我的一点经验来看,尤其是在置换大型数组和多维数组时,置换会很重。在这种情况下,
b
489x489
,成本可能会很高。如果它是
a
而不是
1x117
,那也没什么大不了的<另一方面,代码>重塑
据说对运行时成本影响不大。