2013-08-12 17 views
5

Devo regolarmente esportare molte cifre (centinaia) in un singolo file. Attualmente utilizzoL'esportazione delle figure MATLAB è molto lenta rispetto a R

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

Il mio codice utilizza una singola figura nascosta che viene riutilizzata per ogni nuova figura.

Ora, il problema è che posso raggiungere una velocità massima di esportazione di circa 8 cifre al secondo. In R, puoi facilmente tracciare circa 200 cifre al secondo. Qualcuno ha qualche suggerimento su come velocizzare (sostanzialmente) le capacità di esportazione di MATLAB?

gen

+0

Sospetto che possa essere la figura e il grafico * generazione *, piuttosto che l'atto di * stamparli *, è lento. Almeno, sembra che tu non abbia fatto il lavoro per isolare il tempo richiesto per * stampare * dal tempo necessario per * generare * i grafici. Dico questo perché posso vedere che * non * passi un handle alla tua chiamata per stampare (vedi, ad esempio, l'argomento ** handle ** descritto su http://www.mathworks.com/help/ matlab/ref/print.html). Scommetto che se pubblichi il codice per generare i grafici, possiamo aiutarti a velocizzarlo un po '. Oppure, potresti usare il Profiler MATLAB da solo. –

+0

@BobGilmore: No. La stampa delle cifre più semplici in postscript richiede da 0,11 a 0,13 secondi anche su un computer veloce, sia che passi in handle a 'print' o no. – horchler

+0

Grazie a @BobGilmore. In realtà, si tratta davvero dell'esportazione, non della generazione. Puoi vederlo se esporti ancora e ancora la stessa figura: 'figura; plot (rand (10,10)); tic; per i = 1: 100 stampa ('- dpsc2', 'test.ps', '-append'); fine; toc' richiede circa 10 secondi sulla mia macchina. – Jan

risposta

6

sento il tuo dolore. Questo problema è anche il motivo per cui la funzione getframe per la generazione di filmati è così inefficiente. L'unico modo che conosco è quello di scrivere una funzione più semplice che chiama la funzione di livello basso hardcopy. Ecco an example of this for image-based graphics insieme ad alcuni avvertimenti. La funzione hardcopy supporta sia il 'dpsc2' e opzioni 'di aggiunta' che print fa:

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

Mentre print(gcf,'-dpsc2', 'outfile.ps', '-append'); dura circa 0,12 secondi, la porta sopra soli 0,004 secondi sulla mia macchina!

Se si fa help hardcopy non si otterranno molte informazioni. Tuttavia, se devi eseguire il reverse engineering di qualsiasi cosa, puoi leggere il codice per print (edit print) o le varie funzioni private che chiama (ad es., edit private/render, edit private/paperfig, edit private/ghostscript).

+0

Grazie! Questo è fantastico! Per il mio codice di tracciamento, potrei effettivamente sostituire la mia chiamata 'print' con una chiamata' hardcopy' e ha funzionato bene. Solo una particolarità: per ottenere uno sfondo bianco, ho dovuto chiamare il comando di cambio colore come ultimo comando grafico subito prima dell'esportazione. Grazie ancora! – Jan

+0

Non sono sicuro se questo si applica a te, ma lo srotolamento del ciclo potrebbe aiutarti anche a uscire. – Veridian

+0

@starbox: non sono sicuro che funzioni. Ho profilato 'print' e trascorre solo un sacco di tempo a preparare la figura per l'esportazione. 'hardcopy' sembra essere un comando al centro di esso. – Jan

Problemi correlati