2015-12-02 19 views
5

sto cercando di vettorizzare il seguente ciclo nidificato, quindi non ho per tracciare i valori in un ciclo:Vectorize nidificato per-loop e if

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 
  • dimensioni (validMaskX) = 45x44
  • dimensioni (Dati X) = dimensioni (Dati Y) = 45x45

Qualche suggerimento su come fare questo?

+0

non testato, ma non 'Vind = trovare (validMaskX); vindn = vind + size (validMaskX, 1); trama (ah, [dataX (vind), dataX (vindn)], [dataY (vind), dataY (vindn)]); 'lavoro? Supponendo che 'validMaskX' e' dataX' e 'dataY' abbiano lo stesso numero di righe. – zeeMonkeez

+0

Vuoi tutte le linee sullo stesso asse? Poiché il tuo codice traccia una riga alla volta, avrai bisogno di un ciclo per il periodo di tempo. – Adiel

risposta

2

Con

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

si possono trovare i punti validi e le seconde indici. Quindi, è possibile tracciare con

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

Se desideri solo una trama oggetto (il che renderebbe il rendering molto più veloce), in considerazione

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

Questo è ESATTAMENTE quello di cui avevo bisogno! Grazie! –

+0

Almeno hai cambiato i nomi delle variabili ... :) – Adiel

+0

Ehi, l'ho postato come commento prima di te! – zeeMonkeez

1

Se si desidera che tutte le linee insieme sulla figura, si può fare:

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

Credevo di aver capito la vostra soluzione di ieri, ma a quanto pare ho don' t, perché quando provo a modificare il seguente codice in base alla tua risposta, non funziona: come modificheresti secondo la tua precedente risposta?

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 

dimensioni (Dati X) = size (Dati Y)

+0

Prova a cambiare questa linea: 'vindn = vind + 1;' – Adiel

+0

Scusa, questo non ha sovle il mio problema ... –

+0

A. 'size (validMaskY, 1)' è 45, quindi quando 'i = 45' puoi non ottieni 'dataX (i + 1, j)', supererà le dimensioni della matrice. B. Sarà molto utile se riesci a spiegare quale sia esattamente il problema. Non possiamo indovinare quale sia il "tuo problema" e perché non ha risolto. – Adiel