Matlab 将嵌套for循环和if语句矢量化

Matlab 将嵌套for循环和if语句矢量化,matlab,if-statement,for-loop,vectorization,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 尺寸(validMaskX)=4

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

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
  • 尺寸(validMaskX)=45x44
  • 尺寸(数据x)=尺寸(数据y)=45x45

有什么建议吗

如果您希望图形上的所有线条都在一起,您可以这样做:

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-')

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

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-');

昨天我以为我理解了你的解决方案,但显然我不理解,因为当我试图根据你的答案修改以下代码时,它不起作用:你将如何根据你以前的答案修改它

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)

未测试,但确实
vind=find(validMaskX);vindn=vind+尺寸(有效值为1);绘图(啊,[dataX(vind),dataX(vindn)],[dataY(vind),dataY(vindn)]工作?假设
validMaskX
dataX
dataY
具有相同的行数。是否希望所有行位于同一轴上?因为您的代码一次只绘制一行,所以您需要一个时间项循环。这正是我所需要的!谢谢至少您更改了变量名称…:)嘿,我在你面前把这作为一种评论方式发布了!但话说回来,这是非常标准的东西:)嗨,zeeMokeez,我昨天以为我理解了你的解决方案,但显然我不理解,因为当我试图修改以下代码时,这与我昨天发布的问题或多或少是一样的,它不起作用:尝试更改这一行:
vindn=vind+1
A.
size(validMaskY,1)
为45,因此当
i=45
无法获取
dataX(i+1,j)
时,它将超过矩阵维数。B.如果你能解释问题的确切原因,那将非常有帮助。我们无法猜测“您的问题”是什么,以及为什么它没有解决。我将尝试进一步解释:当我尝试对double-for循环进行向量化时,得到的数字与运行double-for循环时的数字不同(这是正确的!)。我发布的第一个问题是,draw's在一个方向上连接点之间的线,而我最近发布的一个问题是绘制垂直于其他线的线。结果是一个网格,其中所有满足validMaskX、validMaskY的点都连接在一起。我可以在一个方向上画线,但不能在另一个方向上画线。我在很多图像中循环,所以dataX和dataY的大小会有所不同,但总是相等的。Size(validMaskX)=[m,n]其中Size(validMaskY)=[n,m],希望这有助于原始解决方案,这取决于矩阵按列主顺序索引的事实@Adiel关于
vindn=vind+1的评论应该可以工作。
validMaskX
validMaskY
的尺寸差异是否正确?
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