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

X(end+1)=Y beschleunigen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2009, 17:08     Titel: X(end+1)=Y beschleunigen
  Antworten mit Zitat      
Hi,

wie kann ich X(end+1)=Y beschleunigen wenn ich nicht weiss wie lange die Liste wird?

MfG Thomas
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2009, 20:02     Titel:
  Antworten mit Zitat      
Hallo,

An sich ist an dem Code nichts auszusetzen, wenn dadurch ein Element an eine Liste angefügt werden soll. Ich vermute aber mal, dass das in einer FOR-Schleife passiert? Wenn im voraus nicht klar ist, wie groß die Schleife wird, sehe ich folgende Möglichkeiten:
- mit dem Performance-Verlust leben.
- auf einen Wert präallozieren, der groß genug ist und dessen Überschreitung nicht realistisch ist, und mit dem belegten Speicher leben.
- Kompromiss: z.B. auf Länge 100 vorbelegen, wenn das nicht mehr reicht, auf Länge 200 erweitern etc.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 13.10.2009, 20:06     Titel:
  Antworten mit Zitat      
Hi, ein cell array dürfte ein bisschen schneller sein, aber die optimale Lösung wurde schon genannt und ist wirklich viel viel schneller.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 13.10.2009, 22:33     Titel:
  Antworten mit Zitat      
"klassische" Erzeugung eines Array 1x100000
Code:
tic
data = [];
for i=1:100000
   data(end+1) = rand(1);
end
toc
% Elapsed time is 36.383008 seconds.


Hier wird ein Array gleicher Größe aufgebaut, jedoch häppchenweise (100x1000). Zuerst wird also ein "Zwischencontainer" (1x1000) gefüllt (tmp), der dann den eigentlichen Array (data) erweitert.
Code:
tic
data = [];
tmp = zeros(1,100);
for m=1:100
   for n=1:1000
      tmp(n) = rand(1);
   end
   data = [data tmp];
end
toc
% Elapsed time is 0.194813 seconds.


Der Zeitunterschied spricht für sich...


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2009, 11:04     Titel: THX
  Antworten mit Zitat      
Danke für die Beschleunigung. Cool

Ich habe so ein ding auch in einer if abfrage da wird dann nach dem gleichen Muster vorgegangen?
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 - 2024 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.