2015-12-02 14 views
5

Ich versuche, die folgende verschachtelte Schleife vektorisieren, so dass ich nicht die Werte in einer Schleife plotten müssen:Vectorize for-Schleife verschachtelt und if-Anweisung

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 
  • Größe (validMaskX) = 45x44
  • Größe (Datax) = Größe (dataY) = 45x45

Vorschläge, wie dies zu tun?

+0

Nicht getestet, aber nicht 'Vind = finden (validMaskX); vindn = vind + Größe (validMaskX, 1); plot (ah, [datenX (vind), datenX (vindn)], [datenY (vind), datenY (vindn)]) "arbeiten? Das heißt, dass "validMaskX" und "dataX" und "dataY" die gleiche Anzahl von Zeilen haben. – zeeMonkeez

+0

Möchten Sie alle Linien auf der gleichen Achse? Da der Code jeweils eine Zeile darstellt, benötigen Sie eine Schleife für den Zeitbegriff. – Adiel

Antwort

2

Mit

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

Sie die gültigen Punkte und die zweiten Indizes finden. Dann können Sie mit

plot(ah, [dataX(vind), dataX(vindn)], [dataY(vind), dataY(vindn)], 'g-'); 

plotten Wenn Sie nur ein Grundstück Objekt wollen (das Rendering wesentlich schneller machen würde), betrachten

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

Das ist genau das, was ich brauchte! Vielen Dank! –

+0

Zumindest hast du die Variablennamen geändert ... :) – Adiel

+0

Hey, ich habe das als Kommentar weit vor dir gepostet! – zeeMonkeez

1

Wenn Sie alle Linien auf dem Bild zusammen wollen, können Sie das tun:

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

Ich dachte, ich Ihre Lösung gestern verstanden, aber anscheinend I don‘ t, weil, wenn ich versuche, den folgenden Code entsprechend deiner Antwort zu modifizieren, es nicht funktionieren wird: Wie würdest du das entsprechend deiner früheren Antwort ändern?

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 

Größe (Datax) = Größe (dataY)

+0

Versuchen Sie diese Zeile zu ändern: 'vindn = vind + 1;' – Adiel

+0

Tut mir leid, das hat mein Problem nicht gelöst ... –

+0

A. 'size (validMaskY, 1)' ist 45, also wenn 'i = 45' kannst du nicht erhalten 'dataX (i + 1, j)', wird es Matrix Dimensionen überschreiten. B. Es wird sehr hilfreich sein, wenn Sie genau erklären können, was das Problem ist. Wir können nicht erraten, was "dein Problem" ist und warum es nicht gelöst hat. – Adiel