Ответ Свена - способ сделать это, если вы не хотите дополнительно обрабатывать совпадающие значения.
Следующие два примера возвращают копии только с совпадающими значениями:
np.compress((25 < a) & (a < 100), a).size
Или:
a[(25 < a) & (a < 100)].size
Пример сеанса интерпретатора:
>>> import numpy as np
>>> a = np.random.randint(200,size=100)
>>> a
array([194, 131, 10, 100, 199, 123, 36, 14, 52, 195, 114, 181, 138,
144, 70, 185, 127, 52, 41, 126, 159, 39, 68, 118, 124, 119,
45, 161, 66, 29, 179, 194, 145, 163, 190, 150, 186, 25, 61,
187, 0, 69, 87, 20, 192, 18, 147, 53, 40, 113, 193, 178,
104, 170, 133, 69, 61, 48, 84, 121, 13, 49, 11, 29, 136,
141, 64, 22, 111, 162, 107, 33, 130, 11, 22, 167, 157, 99,
59, 12, 70, 154, 44, 45, 110, 180, 116, 56, 136, 54, 139,
26, 77, 128, 55, 143, 133, 137, 3, 83])
>>> np.compress((25 < a) & (a < 100),a).size
34
>>> a[(25 < a) & (a < 100)].size
34
В вышеприведенных примерах используются "побитовое и" (&) для поэлементного вычисления двух логических массивов, которые вы создаете для сравнения.
Например, можно написать отличный ответ Свена:
np.bitwise_and(25 < a, a < 100).sum()
Булевы массивы содержат значения True
, когда условие соответствует, и False
, если оно не выполняется.
Бонусный аспект логических значений заключается в том, что True
эквивалентно 1, а False
- 0.