Sembra che eseguire operazioni relazionali numeriche (maggiore di, minore di) su NaN sia 10 volte più lento rispetto a non NaN in MATLAB R2013a (versione 8.1).Confronto relazionale lento NaN in MATLAB
>> a = rand(10000);
>> b = NaN(size(a));
>> tic; a>0; toc
Elapsed time is 0.083838 seconds.
>> tic; b>0; toc
Elapsed time is 0.991742 seconds.
Alcuni esperimenti mostra il tempo impiegato scale con la proporation di NaN nella matrice, in modo tale che una matrice di tutti NaNs prende lunga e tutte non NaNs è più rapido. Gli inf sono veloci quanto i non-NaN.
Sto facendo confronti su array con un gran numero di NaN. Per rallentare questo rallentamento, sto sostituendo i NaN nei miei array con Infs (ad esempio -Inf
se stavo facendo b> 0). Questo aiuta, ma la sostituzione stessa è lenta. Effettivamente è solo perché sto facendo molti confronti simili sullo stesso array che la sostituzione one-off aiuta nel complesso.
Quindi la mia domanda è: qualcuno ha qualche idea migliore per confrontarsi con molti NaN?
quale versione Matlab? per me R2015b su win 64 -> i tempi sono gli stessi! – matlabgui
@matlabgui: Davvero ?! Gah, sono nel 2013a. Avrei dovuto dirlo (modificherò Q)! – Justin
@matlabgui Non vale nulla che R2015b contenga un [upgrade del motore di esecuzione] piuttosto significativo (http://www.mathworks.com/help/matlab/release-notes.html#zmw57dd0e3251). L'ho visto arrivare con benchmarking [abbastanza recentemente] (http://stackoverflow.com/questions/33761451/). – excaza