У меня есть массив numpy, содержащий 10^8 поплавков, и вы хотите подсчитать, сколько из них> = заданный порог. Скорость имеет решающее значение, поскольку операция должна выполняться на большом количестве таких массивов. Конкурсанты до сих пор являютсяСамый быстрый способ подсчета значений массива выше порогового значения в numpy
np.sum(myarray >= thresh)
np.size(np.where(np.reshape(myarray,-1) >= thresh))
Ответы на Count all values in a matrix greater than a value предполагают, что np.where() будет быстрее, но я нашел противоречивые результаты синхронизации. Я имею в виду это для некоторые реализаций и булевых условий np.size (np.where (cond)) быстрее, чем np.sum (cond), но для некоторых он медленнее.
В частности, если значительная часть записей удовлетворяет условию, то np.sum (cond) значительно быстрее, но если небольшая часть (возможно, менее десятая), то np.size (np.where (cond)) выигрывает.
вопрос распадается на 2 части:
- Любые другие предложения?
- Имеет ли смысл, что время np.size (np.where (cond)) увеличивается с количеством записей, для которых cond является истинным?
numexpr или Numba, вероятно, может ускорить процесс, избегая создания промежуточного массива. – user2357112
есть также np.count_nonzero, который намного быстрее, чем логическая сумма в новых версиях numpy. – seberg