为了实现更快的速度,我想在下面的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
我该怎么做?
答案 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;