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

'zeros'-Funktion beschleunigen

 

Finn
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2013, 18:48     Titel: 'zeros'-Funktion beschleunigen
  Antworten mit Zitat      
Hallo,

ich möchte einen recht großen 3D-Bildstapel anlegen. Die zeros-Funktion braucht dafür extrem lange (nach 3 Minuten abgebrochen).

stack=zeros(3400,3400,300)

Gibt es dafür auch eine schnellere Methode?
Könnte es damit zu tun haben, dass bei der Erstellung des Bildstapels alle Ziffern im Command Window dargestellt werden, bzw. wie kann man dies ausschalten?

Schöne Grüße,

Finn
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.04.2013, 19:46     Titel:
  Antworten mit Zitat      
Hallo,

die Ausgabe wird durch Strichpunkt am Ende der Zeile unterdrückt.
ZEROS ist schneller, wenn der Datentyp explizit angegeben wird:

Code:
stack=zeros(3400,3400,300, 'double');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.04.2013, 00:36     Titel: Re: 'zeros'-Funktion beschleunigen
  Antworten mit Zitat      
Hallo Finn,

Ein 3400 x 3400 x 300 Array vom Typ DOUBLE benötigt 27.7GB. Dies muss als zusammenhängender Block im Speicher frei sein, so dass als grobe Schätzung das doppelte an RAM vorhanden sein sollte, wenn Du nicht auf den sehr langsamen virtuellen Speicher zugreifen möchtest, der die Festplatte nutzt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Finn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 28.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.04.2013, 08:52     Titel:
  Antworten mit Zitat      
Herzlichen Dank! Mit dem Semikolon funktioniert es jetzt innerhalb einer Sekunde! Habe hier einen 49GB RAM Rechner:) Aber uint16 reicht schon aus.

Schöne Grüße,
Finn
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.04.2013, 11:29     Titel:
  Antworten mit Zitat      
Hallo Harald,

Ich bin sehr verblüfft, dass "zeros(m,n,'double')" so viel schneller ist als "zeros(m,n)". Das betrifft zumindest das Command-Window:
Code:
tic; c = zeros(1000, 2000); c(1)=rand; toc
clear('c');
tic; c = zeros(1000, 2000, 'double'); c(1)=rand; toc

Das Schreiben mit RAND soll unterdrücken, dass Matlab's JIT so schlau sein könnte, dass Array erst zu erstellen, wenn es auch benötigt wird.

Hier ist tatsächlich die Angabe des Types mehr als 1000 mal schneller (R2009a/64/Win). Aber sowie ich die Codes in eine Funktion schreibe, benötigen beide wieder exatkt die gleiche Zeit. Das wäre ja eigentlich auch logisch, weil die hauptsächliche Arbeit identisch ist, nämlich das Allozieren des Speichers.

Dennoch bin ich neugierig, wieso das im Command-Window einen so großen Unterschied macht. Leider hat die JIT-Acceleration keine Debug-Schnittstelle.

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.