如何在Matlab中避免嵌套for循环?

时间:2013-01-04 20:10:14

标签: matlab loops for-loop vectorization

如果我有:

for i=1:n
    for j=1:m
        if outputImg(i,j) < thresholdLow
            outputImg(i,j) = 0;
        elseif outputImg(i,j)> thresholdHigh
            outputImg(i,j) = 1;
        end
    end
end

甚至更糟:

for i=1:n
    for j=1:m
        for k=1:q
                % do something  
        end
    end
end

如果没有for

,我怎样才能做到这一点

3 个答案:

答案 0 :(得分:5)

您可以使用逻辑条件代替第一个循环,例如:

 outputImg(outputImg<thresholdLow)=0;
 outputImg(outputImg>thresholdHigh)=1;

当然还有许多其他等效方法可以使用逻辑运算符...

对于第二个循环,您需要更具体,但我认为您掌握了逻辑条件技巧。

答案 1 :(得分:1)

如果使用二进制矩阵:

index_matrix = (outputImg < thresholdLow);

以下举行:

index_matrix(i,j) == 0 iff outputImg(i,j) < thresholdLow
index_matrix(i,j) == 1 iff outputImg(i,j) > thresholdLow

see also

对于第二个循环,你总是可以使用matirx for for循环

答案 2 :(得分:1)

对于一般解决方案,请查看ndgrid,在第二种情况下,您可以使用以下内容:

[i j k] = ndgrid(1:n, 1:m, 1:q);
ijk = [i(:) j(:) k(:)];

然后,您可以遍历ijk的组合列表,即现在ijk,以参数化您的阈值语句。