2017-10-07 79 views
3

我有一个循环函数,内部循环取决于外部循环的值。如何在Matlab中矢量化双重依赖循环?

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 

由于

+0

@Sardar乌萨马节拍我对它(有比我更好的答案),但我会指出最后一行(你我们不知道),问题是你不需要Gamma的指示:'Gamma = mod(ii-jj,255);' –

回答

4

使用bsxfuntril

Gamma = mod(tril(bsxfun(@minus, (1:500).', 1:500)), 255); 
%this 1:500 is for the inner loop---^  ^---This 1:500 is for the outer loop 

或使用带有隐式膨胀相同的方法(为MATLAB R2016b和更高版本):

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