WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

For-Schleife vektorisieren

 

HugoW.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2011, 21:51     Titel: For-Schleife vektorisieren
  Antworten mit Zitat      
Hi!

Ich habe eine For-Schleife der Form:
Code:

for i = 1:x
   K(i,1) = KF{i}.bla;
   K(i,2) = KF{i}.blub;
   ...
end
 


Diese Schleife würde ich gerne vektorisieren.
Wie kann ich das realisieren? Meine Idee wäre, die Zuweisungen in eine Funktion zu schreiben und diese Funktion auf jeden Zeile der Matrix K anzuwenden (dafür wird es doch wahrscheinlich eine Funktion geben?)

Danke,
Hugo


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.09.2011, 22:33     Titel: Re: For-Schleife vektorisieren
  Antworten mit Zitat      
Hallo HugoW,

Ich glaube nicht, das Dein Programm vektorisierbar ist. Wieso möchtest Du es des vektorisieren? Geht es um die Geschwindigkeit? Dann wären andere Methoden wohl hilfreicher:

Code:

K = zeros(x, 10);  % Pre-allocate!
for i = 1:x
   tmp = KF{i};  % Cell-Indizierung nur einmal!
   K(i,1) = tmp.bla;
   K(i,2) = tmp.blub;
   ...
end

Vielleicht hilft auch STRUCT2CELL, aber dann sollte K ein CELL Array sein.
Welche Werte stehen denn in den Feldern bla und blub?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
HugoW.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2011, 22:45     Titel:
  Antworten mit Zitat      
Hallo Jan,

ja, es geht um die Geschwindigkeit.
Mit der einmaligen Indizierung, das gefällt mir schon mal.
Du meinst, ich könnte man CELL2STRUCT irgendetwas anfangen, oder? K Ist in der Tat ein Cell-Array, das Structs enthält. Diese Structs sind jedoch nicht identisch und haben teilweise andere Felder.
 
HugoW.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.09.2011, 14:07     Titel:
  Antworten mit Zitat      
Hi!

Habe gestern Abend Mist von mir gegeben.

1. Ja, es geht um die Geschwindigkeit
2. Preallokieren wäre natürlich super, aber dafür müsste ich wissen wie viele Zeilen K haben soll.

Der Code gestaltet sich nämlich eigentlich so:

Code:

z = 1;
for i = 1:x
   if(strcmp(KF{i}.T,'W')
      K(z,1) = KF{i}.bla;
      K(z,2) = KF{i}.blub;
      ...
      z = z+1;
    end
end
 


Das hängt also mit meinem anderen Thread zusammen, wo du ja meintest es wäre am effizientesten das über eine For-Schleife rauszufinden.

3. In den Feldern bla und blub stehen Doubles.

4. K ist kein Cell-Array, sondern eine Matrix. KF ist jedoch eines. KF enthält structs, die unterschiedlich aussehen. Allerdings werden von den Strukturen in KF nur Felder gebraucht, die für alle Strukuten vorhanden sind. Wäre es daher eventuell clever KF in ein Struct-Array umzuwandeln? Das ist aber vermutlich auch aufwendig....und KF liegt nun einmal als Cell-Array vor.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2011, 22:04     Titel:
  Antworten mit Zitat      
Hallo HugoW,

Zu viel Speicher zu pre-allocieren ist meistens kein Problem, solange das RAM ausreicht:

Code:
z = 1;
K = zeros(x, 2);  % Oder zweite Dimension nach Bedarf
for i = 1:x
   tmp = KF{i};
   if strcmp(tmp.T, 'W')
      K(z,1) = tmp.bla;
      K(z,2) = tmp.blub;
      ...
      z = z+1;
    end
end
K = K(1:z - 1, :);  % Entferne unnötig allocierten Speicher
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.