Si encuentras algún error con tu código o proyecto, recuerda probar siempre en un entorno de testing antes subir el código al proyecto final.
Solución:
Si tu array se llama a
el número de elementos que cumplen 25 < x < 100
es
((25 < a) & (a < 100)).sum()
La expresion (25 < a) & (a < 100)
resulta en un booleano array con la misma forma que a
con el valor True
para todos los elementos que satisfacen la condición. Sumando sobre este booleano array golosinas True
valores como 1
y False
valores como 0
.
podrías usar histogram
. He aquí un ejemplo de uso básico:
>>> import numpy
>>> a = numpy.random.random(size=100) * 100
>>> numpy.histogram(a, bins=(0.0, 7.3, 22.4, 55.5, 77, 79, 98, 100))
(array([ 8, 14, 34, 31, 0, 12, 1]),
array([ 0. , 7.3, 22.4, 55.5, 77. , 79. , 98. , 100. ]))
En tu caso particular, sería algo como esto:
>>> numpy.histogram(a, bins=(25, 100))
(array([73]), array([ 25, 100]))
Además, cuando tiene una lista de cadenas, debe especificar explícitamente el tipo, de modo que numpy
sabe producir un array de flotadores en lugar de una lista de cadenas.
>>> strings = [str(i) for i in range(10)]
>>> numpy.array(strings)
array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
dtype='|S1')
>>> numpy.array(strings, dtype=float)
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
Sobre la base del buen enfoque de Sven, también puede hacer algo un poco más explícito:
numpy.count_nonzero((25 < a) & (a < 100))
Esto primero crea un array de booleanos con un booleano para cada número de entrada en array a
y luego cuente la cantidad de valores no falsos (es decir, verdaderos) (lo que da la cantidad de números coincidentes).
Tenga en cuenta, sin embargo, que este enfoque es el doble de lento que el de Sven .sum()
acercarse, en un array de 100.000 números (NumPy 1.6.1, Python 2.7.3), unos 300 µs frente a 150 µs.
Te invitamos a añadir valor a nuestra información añadiendo tu veteranía en las aclaraciones.