Verfasst am: 01.09.2010, 14:36
Titel: Schleifenergebnisse in einer Variable zusammensetzen
Hallo,
ich versuche gerade über 2 for-Schleifen ein Ergebnis zu berechnen. Die Berechnung der inneren Schleife funktioniert korrekt und gibt nacheinander k mal n x 3 Matrizen aus, wobei die n, die Anzahl der Zeilen variiert.
Mit der zweiten Schleife möchte ich nun alle Schleifenergebisse F= n x 3 in einer Variable zusammenlegen. Normalerweise würde ich sowas so machen : A = [a;b]. Dann werden a und b untereinander geschrieben. Mit der zweiten Schleife bekomme ich das so aber nicht hin, weil es sich um jeweils 3 Spalten handelt bzw. sich alles in einer loop befindet...
Code:
for k=2:5 ... for i=1:size(X,2) ...
F(i,:)=X;
end
F % bis hier stimmt alles, alle Zwischenergebnisse F= nx3 sollen nun in FF % untereinander geschrieben werden.
FF= F..????
end
FF
Hallo,
danke für den Tip denny! Ich habe deine Vorschläge versucht, aber komme damit nicht weiter, da sich ja die "Zwischenergebnisse" in einer Schleife befinden. Ich habe zwischenzeitlich ein ähnliches Problem (s.u.). Es muss doch möglich sein, unterschiedlich lange Schleifenergebnisse zu einer Matrix zusammenzufügen?!? Den eigenen Zähler habe ich ja drin und das mit vertcat funktioniert nicht, da sich die Zusammenfassung ja in der nächst höheren Schleife befindet...
Vielleicht bin ich auch grad betriebsblind
Code:
for h=1:size(gg,2) clear Y2 s2 II
s2=ismember(grp,gg(h));
Y2=YN(:,find(s2==1));
for i=1:size(Y2,2)
Spectrum=Y2(:,i);
for j=1:size(FI,2)
I=Spectrum(FI(h,j));
Intens(j,:)=I ;
end
II(i,:)=[Intens]';
end
II % hier werden nun z.B. 46x5, 50x5 und 37x5 Matrices als Ergebnis % ausgegeben...aber alle einzelnd... % ich möchte aber am Ende eine Matrix M=133*5 haben, also alle % Zwischenschritte untereinander! end
Außerdem ist mir aufgefallen, dass das zweite Ergebnis einfach die kürzeren überschreibt anstelle sie untereinander anzuordnen. Ich habe das mit den clear II Befehlen gelöst. Aber untereinandergeschrieben wird da nichts.
Das Problem war wohl, dass ich nicht wusste, wie man in einer Schleife M = [A; y] darstellt. Die leere Matrix also vordefinieren und dann nacheinander und untereinander befüllen!
Danke trotzdem an alle die sich Gedanken gemacht haben!!
Grüße
Zool
Ist das richtig? Möglicherweise stimmen die Dimensionen von YN und grp nicht über ein, dann bräuchtest Du doch noch ein FIND(ismember()).
Wie ich sehe, hast Du eine Lösung gefunden, während ich gerade antworte. Dennoch könnte die oben gezeigte Vereinfachung hilfreich sein. Bei "ismember()==1" kann man das "==1" weglassen. Die Schleifen über i und j kann man besser als Matrix-Operation implementieren. Und das CLEAR bringt hier nichts.
Das Weglassen von Schleifen ist eine sehr effiziente Method in Matlab. Erstens wird der Code dramatisch schneller, zweitens kann man einfach viel weniger Fehler machen, wenn man sich erst gar nicht mit Indices herumschlagen muss.
Deswegen heißt es auch "Mat(rix)lab"!
Gruß, Janv
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.