2013-08-12 9 views
5

Ich muss regelmäßig viele Zahlen (Hunderte) in eine einzige Datei exportieren. Zur Zeit verwende ichMATLAB Figur Export ist sehr langsam im Vergleich zu R

print('-dpsc2', outfile, '-append'); 

Mein Code verwendet eine einzelne versteckte Figur, die für jede neue Figur wiederverwendet wird.

Nun, das Problem ist, dass ich eine maximale Exportgeschwindigkeit von etwa 8 Zahlen pro Sekunde erreichen kann. In R können Sie problemlos rund 200 Bilder pro Sekunde zeichnen. Hat jemand Vorschläge, wie Sie die MATLAB-Exportmöglichkeiten (wesentlich) beschleunigen können?

Jan

+0

Ich vermute, dass es die Figur und die Handlung * Generation * sein kann, eher als die Tat, sie * zu drucken, das ist langsam. Zumindest scheint es so zu sein, dass Sie nicht die Arbeit erledigt haben, um die Zeit, die für das Drucken erforderlich ist, von der Zeit zu isolieren, die benötigt wird, um die Graphen zu erzeugen. Ich sage das, weil ich sehen kann, dass Sie * nicht * einen Handle in Ihrem Aufruf zum Drucken übergeben (siehe zum Beispiel das ** handle ** -Argument, das unter http://www.mathworks.com/help/ beschrieben wird). matlab/ref/print.html). Ich wette, dass wenn Sie den Code zum Generieren der Graphen veröffentlichen, wir Ihnen helfen können, das ziemlich schnell zu beschleunigen. Oder Sie können den MATLAB Profiler selbst verwenden. –

+0

@BobGilmore: Nein. Das Drucken der einfachsten Zahlen in Postscript dauert selbst auf einem schnellen Computer etwa 0,11 bis 0,13 Sekunden, egal ob ich einen Handle zum Ausdrucken übergebe oder nicht. – horchler

+0

Danke @BobGilmore. Eigentlich geht es wirklich um den Export, nicht um die Generation. Sie können dies sehen, wenn Sie einfach immer wieder die gleiche Figur exportieren: 'figure; Plot (Rand (10,10)); Tic; für i = 1: 100 drucken ('- dpsc2', 'test.ps', '-append'); Ende; toc' dauert ungefähr 10 Sekunden auf meiner Maschine. – Jan

Antwort

6

Ich fühle deinen Schmerz. Dieses Problem ist auch der Grund, warum die getframe-Funktion zum Erzeugen von Filmen so ineffizient ist. Die einzige Möglichkeit, die ich kenne, ist eine einfachere Funktion zu schreiben, die die Low-Level-Funktion hardcopy aufruft. Hier ist an example of this for image-based graphics zusammen mit einigen Vorbehalten. Die hardcopy Funktion unterstützt sowohl die ‚dpsc2‘ und ‚append‘ Optionen, dass print tut:

hardcopy(gcf,'outfile.ps','-dpsc2','-append'); 

Während print(gcf,'-dpsc2', 'outfile.ps', '-append'); etwa 0,12 Sekunden in Anspruch nimmt, dauert die oben nur 0,004 Sekunden auf meinem Rechner!

Wenn Sie help hardcopy tun, werden Sie nicht sehr viele Informationen bekommen. Allerdings, wenn Sie müssen Ingenieur etwas umkehren können Sie den Code für print (edit print) oder die verschiedenen privaten Funktionen lesen sie ruft (zum Beispiel edit private/render, edit private/paperfig, edit private/ghostscript).

+0

Danke! Das ist großartig! Für meinen Plot-Code konnte ich tatsächlich meinen "Druck" -Aufruf durch einen "Hardcopy" -Aufruf ersetzen, und es funktionierte gut. Nur eine Besonderheit: Um einen weißen Hintergrund zu erhalten, musste ich den Farbwechselbefehl als letzten Grafikbefehl direkt vor dem Export aufrufen. Danke noch einmal! – Jan

+0

Nicht sicher, ob dies für Sie gilt, aber Loop Enrolling könnte Ihnen möglicherweise auch helfen. – Veridian

+0

@Starbox: Nicht sicher, ob dies funktioniert. Ich profilierte "Print" und es verbringt einfach viel Zeit damit, die Figur für den Export vorzubereiten. Hardcopy scheint im Kern ein Befehl zu sein. – Jan

Verwandte Themen