条件的向量化(循环内)

时间:2018-07-09 08:25:01

标签: matlab performance for-loop if-statement vectorization

为了实现更快的速度,我想在下面的matlab代码中进行向量化:

   A=randi([0 1],20,20);
    B=zeros(20);
    for row = 5:15
     for column = 5:15
    if(A(row,column)==1 && (A(row+1,column)~=1 ||A(row,column+1)~=1)) 
      B(row,column)=1;
    end
     end
    end

我该怎么做?

2 个答案:

答案 0 :(得分:2)

只需为整个循环一次计算所有A(row, column)==1,然后使用普通的布尔运算即可。对于您介绍的情况,这应该工作得很好(尽管短路的操作方式略有不同,所以可能并非总是如此)。

row = 5:15;
col = 5:15;
firstCond = A(row, col) == 1;
secondCond = A(row+1, col) ~= 1;
thirdCond = A(row, col+1) ~= 1;
allCond = firstCond & (secondCond | thirdCond);
B(row, col) = double(allCond);

答案 1 :(得分:1)

我希望这对您有用。

A=randi([0 1],20,20);    
B=zeros(20);    
z = find(A(5:15,5:15) == 1 & (A(6:16,5:15)~=1 | A(5:15,6:16)~=1));    
y = B(5:15,5:15);    
y(z) = 1;    
B(5:15,5:15) = y;