Vectorize嵌套的for-loop和if语句

时间:2015-12-02 11:27:49

标签: matlab if-statement for-loop vectorization

我正在尝试对以下嵌套循环进行矢量化,因此我不必在循环中绘制值:

for i=1:size(validMaskX,1)
   for j=1:size(validMaskX,2)
      if( validMaskX(i,j) )
         plot(ah, [dataX(i,j) dataX(i,j+1)], [dataY(i,j) dataY(i,j+1)], 'g-')               
      end
    end
 end
  • size(validMaskX)= 45x44
  • 大小(DATAX)=尺寸(DATAY)= 45X45

有关如何执行此操作的任何建议?

3 个答案:

答案 0 :(得分:2)

使用

vind=find(validMaskX);
vindn = vind + size(validMaskX, 1);

你可以找到有效点和第二个指数。然后,您可以使用

进行绘图
plot(ah, [dataX(vind), dataX(vindn)], [dataY(vind), dataY(vindn)], 'g-'); 

如果您只想要一个绘图对象(这会使渲染速度更快),请考虑

dx = [dataX(vind), dataX(vindn), nan(numel(vind), 1)]';
dy = [dataY(vind), dataY(vindn), nan(numel(vind), 1)]';
plot(ah, dx(:), dy(:), 'g-');

答案 1 :(得分:1)

如果你想在图上一起显示所有的线条,你可以这样做:

ind=find(validMask);
X=[dataX(ind) dataX(ind+45) nan(length(ind),1)];
Y=[dataY(ind) dataY(ind+45) nan(length(ind),1)];
plot(ah,X',Y','g-')

答案 2 :(得分:0)

我认为我昨天理解你的解决方案,但显然我不知道,因为当我尝试根据你的回答修改下面的代码时,它会起作用:你如何根据你的修改以前的回答?

for i=1:size(validMaskY,1)
   for j=1:size(validMaskY,2)
      if( validMaskY(i,j) )
      plot(ah, [dataX(i,j) dataX(i+1,j)], [dataY(i,j) dataY(i+1,j)], 'r-')
      end
   end
end

大小(DATAX)=尺寸(DATAY)