Verfasst am: 21.03.2014, 10:41
Titel: String in jedem Schleifendurchlauf ändern
Morgen,
ich habe mal eine simple Frage. Kann man einen String in jedem Schleifendurchlauf automatisch neu benennen um dann im Workspace
quasi so viele Strings wie Schleifendurchläufe zu haben? Als Beispiel:
kurze Antwort: Ja, das geht mit einer Kombination aus sprintf und eval, ist aber umständlich. Genau so umständlich ist es dann später, diese einzelnen Vektoren für weitere Berechnungen in Schleifen anzusprechen. Es wird dir hier nicht empfohlen werden, Variablennamen so durchzuzählen, dass ein Index im Namen versteckt ist.
In dem Fall die bessere Lösung ist eine Matrix aus den Vektoren zu erstellen:
Code:
M = zeros(10,3); % als Matrix
C = cell(10,1); % als Cell
hmm okay, vielen Dank erstmal!!
Das Problem an der Sache ist, dass ich gerade das Abspeichern
der Vektoren in einer Matrix umgehen möchte, da ich dieses Beispiel auf ein Programm anwende, bei dem am Ende eine viel zu große Matrix entstehen würde. Außerdem habe ich Vektoren unterschiedlicher Länge und so würde die Matrix mit unnötigen Nullen (die Speicherplatz verbrauchen) aufgefüllt werden. Ich probiere die "schlechte Variante" mal aus, sonst muss ich mir noch eine andere Methode/Möglichkeit überlegen, wie ich meine Vektoren abspeichere.
Schnell mal gecheckt, der Ansatz sieht doch gut aus.. Man kann doch dann super auf die Vektoren im Workspace wieder zurückgreifen, denke das hilft mir weiter!
Vielen Dank
p.s.: Smileys? Wie Wo Was??? Ich sehe keine... ; )
ja tatsächlich. Zu Hause auf meinem Rechner habe ich da in den letzten beiden Zeilen bei den Kommentaren Smileys gesehen, wenn auf die Matrix M zugegriffen wird. Hier im Büro sieht das alles gut aus.
Zurück zum Thema: Mit der zweiten Variante (das mit der Cell) kannst du auch Vektoren unterschiedlicher Länge ohne zusätzliche Nullen abspeichern. Man kann sogar Daten unterschiedlichen Typs darin abspeichern.
das mit dem cell array geht glaub ich nicht, weil die vektoren erst durch Schleifen aufgefüllt werden. Heißt ich habe nicht sofort einen fertigen Vektor1, den ich abspeichern kann, sondern parallel werden verschiedene Vektoren aufgefüllt.
Ich finde die als "schlecht" betitelte Lösung ganz gut, einziges Problem: Wie kann ich die gespeicherten Vektoren dann später wiederum in einer Schleife aufrufen?? Also quasi wieder eine Schleife von 1 bis 10 in der ich dann jeweils bei jedem Durchlauf Vektor1, dann Vektor2 usw aufrufe.
das ist ja genau das Problem, wenn du die Vektoren mit eval erzeugst, wirst du sie wohl auch wieder mit eval ansprechen müssen. Da verliert man dann schnell den Überblick.
Du kannst auch die Matrix oder die Cell nacheinander füllen, beispielsweise so:
Code:
M = zeros(10,3); % als Matrix
C = cell(10,1); % als Cell
for i=1:10 for j = 1:3
v=rand(1);
M(i,j) = v;
C{i} = [C{i},v];
end end % vektor1 = M(1,:) oder vektor1 = C{1}
Alles klar, ich probier das alles mal aus und überprüfe was die schnellste und beste Variante dann letztendlich ist. Auf alle Fälle vielen Dank, das hat mir schonmal sehr viel geholfen!!
Beste Grüße
p.s.: Du hast es mit den Smileys : ) unter dem Code bei der Matrixbeschreibung haste wieder einen eingebaut ^^
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.