Vectorize嵌套的for-loop和if语句

K. *_*eff 5 matlab for-loop if-statement 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
Run Code Online (Sandbox Code Playgroud)
  • size(validMaskX)= 45x44
  • 大小(DATAX)=尺寸(DATAY)= 45X45

有关如何做到这一点的任何建议?

zee*_*eez 2

vind=find(validMaskX);
vindn = vind + size(validMaskX, 1);
Run Code Online (Sandbox Code Playgroud)

您可以找到有效点和第二个索引。然后,你可以用

plot(ah, [dataX(vind), dataX(vindn)], [dataY(vind), dataY(vindn)], 'g-'); 
Run Code Online (Sandbox Code Playgroud)

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

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