При выполнении численных вычислений для скорости, особенно в Python, вы никогда не захотите использовать для циклов, если это возможно.Numpy оптимизирован для «векторизованных» вычислений, поэтому вы хотите передать работу, которую вы обычно выполняете для циклов, специальному индексированию Numpy и таким функциям, как where
.
Я провел быстрый тест на массиве случайных значений 300 000 x 600 от 0 до 1 и обнаружил следующее.
Ваш код, не векторизованный с одним для цикла:
226 мс на сеанс
%%timeit
count = 0
for i in range(np.size(n,0)):
if results[i][0]>=0.7:
count+=1
emilaz Решение:
8,36 мс на сеанс
%%timeit
first_col = results[:,0]
x = len(first_col[first_col>.7])
Решение Итана:
7,84 мс за прогон
%%timeit
np.bincount(results[:,0]>=.7)[1]
Лучшее, что я придумал
6,92 мс за прогон
%%timeit
len(np.where(results[:,0] > 0.7)[0])
Все 4 метода далитот же ответ, который по моим данным был 90,134.Надеюсь, это поможет!