Saltar al contenido

Cómo contar valores en un cierto rango en un Numpy array?

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 ael 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 ay 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *