如何在Matlab中向量化双依赖循环?

时间:2017-10-07 13:11:32

标签: matlab performance vectorization bsxfun

我有一个循环函数,内循环依赖于外循环的值。

for jj = 1:500
     for ii = jj:500
         Gamma(ii,jj) =mod( ii-jj, 255);
     end
end

我正在寻找使代码最快的方法:vectorized或bsxfun。现在,我正在使用矢量化方式,但它可能不是最佳的。我问这个问题是为了找到一个更好的解决方案,或者至少比我的方式更好。

[iiValues, jjValues] = meshgrid(1:500, 1:500); 
mask = iiValues >= jjValues;  % ii >= jj
ii= iiValues(mask);    
jj= jjValues(mask);
Gamma(ii,jj)=mod(ii-jj,255) % I am not sure about the line

由于

1 个答案:

答案 0 :(得分:4)

使用bsxfuntril

Gamma = mod(tril((1:500).'-(1:500)), 255);

或使用与隐式扩展相同的方法(对于MATLAB R2016b及更高版本):

{{1}}