Из некоторых простых тестов
n = numel(P) - nnz(P>I);
кажется быстрее, чем sum(sum(P<=I))
или даже nnz(P<=I)
.Причина, вероятно, в том, что разреженная матрица P<=I
имеет намного больше ненулевых записей, чем P>I
, и, следовательно, требует больше памяти.
Пример:
>> P = sprand(10485, 52420, 1e-3);
>> I = sprand(10485, 52420, 1e-3);
>> tic, disp(sum(sum(P<=I))); toc
(1,1) 549074582
Elapsed time is 3.529121 seconds.
>> tic, disp(nnz(P<=I)); toc
549074582
Elapsed time is 3.538129 seconds.
>> tic, disp(nnz(P<=I)); toc
549074582
Elapsed time is 3.499927 seconds.
>> tic, disp(numel(P) - nnz(P>I)); toc
549074582
Elapsed time is 0.010624 seconds.
Конечно, это сильно зависит отразмеры матрицы и плотность.