2014-01-13 4 views
5

Ich versuche, einen feste Größe 3D-Array, um die dritte Dimension Vektor so plotten Trog iterieren:Bietet MATLAB eine elegantere Möglichkeit, 3D-Arrays zu durchlaufen, um Vektoren der 3. Dimension zu erhalten?

%respo is a 3D array of fixed size defined above 
for ii = 1:size(respo,1) 
    for jj = 1:size(respo,2) 
     plot(squeeze(respo(ii,jj,1:8))) 
    end 
end 

Gibt es einen besseren Weg, dies als mit dem Zeigen genau für Schleife durch 2-Ebene zu tun, um der Vektor bei jeder Iteration aufgetragen?

Ich bekomme dort eine lineare Indizierung für jedes Array in MATLAB, aber ich habe Mühe, mit einem Weg zu kommen, der aus dem Doppel-Looping spart.

+1

Heutzutage ist es nicht mehr wichtig Schleifen zu vermeiden um jeden Preis. Vor allem, wenn der Code klar lesbar ist, würde ich ihn behalten. – bdecaf

+0

Ich muss sagen, ich fand beide Antworten und alle Kommentare nützlich, also danke euch! Das One-Liner von @ luis-mendo ist jedoch das, das ich verwendet habe, da es die MATLAB-Funktionen in dem Maße erleichtert, in dem sie am meisten entwickelt sind. –

Antwort

2

plot angewendet auf eine Matrix plottet die Spalten dieser Matrix. Also: neu anordnen Dimensionen, so dass die dritte der neue erste und die anderen wird erhalten in der neuen zweiten kombiniert, und dann rufen Sie einfach plot

plot(reshape(permute(respo, [3 1 2]), size(respo,3), [])) 
+2

Dies scheint der richtige Weg zu sein. Wenn der ursprüngliche Code "Halten" anstatt "Alles halten" verwendet, könnte man dies nachahmen, indem man ', 'b' als zusätzliche Eingabe zum Plot-Befehl hinzufügt. –

3

Nun, ich denke, man neu gestalten könnte nur eine Schleife benötigen:

respo_2D = reshape(respo, [], size(respo,3)) 

So, jetzt

for ii = 1:size(respo_2D, 1) 
    plot(respo(ii,1:8)); 
end 

(oder möglicherweise sogar plot(respo_2D(:,1:8)') je nachdem, was Sie zu tun versuchen)

Verwandte Themen