Похоже, что числовые реляционные операции (больше, меньше чем) на NaNs в 10 раз медленнее, чем на не-NaN в MATLAB R2013a (версия 8.1).
>> 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.
В некоторых экспериментах показаны масштабы времени с использованием NaN в массиве, так что массив из всех NaN занимает больше времени, и все не NaN являются наиболее быстрыми. Infs так же быстро, как non-NaN.
Я делаю сравнения на массивах с большим количеством NaN. Чтобы взломать это замедление, я заменяю NaNs в своих массивах Infs (например, -Inf
, если я делал b > 0). Это помогает, но замена сама по себе медленная. Действительно, только потому, что я делаю много таких сравнений в том же массиве, что и общая замена в целом.
Итак, мой вопрос: есть ли у кого-нибудь лучшие идеи для сравнения с множеством NaN?