Es scheint, dass die Durchführung numerischer relationaler Operationen (größer als, kleiner als) auf NaNs 10 mal langsamer ist als auf nicht-NaNs in MATLAB R2013a (ver 8.1).Langsame NaN-Vergleichsvergleiche 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.
Einige Experimente zeigt die Zeitskalen der proporation von NaNs in der Anordnung aufgenommen ist, so dass ein Array aller NaNs nimmt längste und alle nicht-NaNs ist schnellste. Infs sind so schnell wie Nicht-NaNs.
Ich mache Vergleiche auf Arrays mit einer großen Anzahl von NaNs. Um diese Verlangsamung zu hacken, ersetze ich NaNs in meinen Arrays durch Infs (z. B. -Inf
, wenn ich b> 0 mache). Dies hilft, aber der Ersatz selbst ist langsam. In der Tat ist es nur, weil ich viele solcher Vergleiche auf dem gleichen Array mache, dass der einmalige Ersatz insgesamt hilft.
Also meine Frage ist, hat jemand bessere Ideen zum Vergleich gegen viele NaNs?
welche Matlab-Version? für mich R2015b auf Sieg 64 -> die Zeiten sind gleich! – matlabgui
@matlabgui: Wirklich ?! Gah, ich bin auf 2013a. Sollte das erwähnt haben (wird Q bearbeiten)! – Justin
@matlabgui Es ist nichts wert, dass R2015b ein ziemlich signifikantes [execution engine upgrade] enthält (http://www.mathworks.com/help/matlab/release-notes.html#zmw57dd0e3251). Ich habe gesehen, dass es vor relativ kurzer Zeit ein Benchmarking gab (http://stackoverflow.com/questions/33761451/). – excaza