python - repetidos - tamaño de un arreglo numpy
Cómo contar la cantidad de elementos verdaderos en una matriz NumPy bool (4)
Tengo una matriz NumPy ''boolarr'' de tipo booleano. Quiero contar la cantidad de elementos cuyos valores son True
. ¿Hay una rutina NumPy o Python dedicada para esta tarea? O bien, ¿necesito iterar sobre los elementos en mi script?
En términos de comparar dos matrices numpy y contar el número de coincidencias (por ejemplo, la predicción correcta de la clase en el aprendizaje automático), encontré el siguiente ejemplo útil para dos dimensiones:
import numpy as np
result = np.random.randint(3,size=(5,2)) # 5x2 random integer array
target = np.random.randint(3,size=(5,2)) # 5x2 random integer array
res = np.equal(result,target)
print result
print target
print np.sum(res[:,0])
print np.sum(res[:,1])
que se puede extender a dimensiones D
Los resultados son:
Predicción:
[[1 2]
[2 0]
[2 0]
[1 2]
[1 2]]
Objetivo:
[[0 1]
[1 0]
[2 0]
[0 0]
[2 1]]
Recuento de predicción correcta para D = 1: 1
Recuento de predicción correcta para D = 2: 2
Esa pregunta resolvió una pregunta bastante similar para mí y pensé que debería compartir:
En raw python puedes usar sum () para contar los valores True en un dict:
>>> sum([True,True,True,False,False])
3
Pero esto no funcionará:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
Quizás esto ayudará a alguien.
Si desea hacer un conteo por fila, proporcione el axis=1
a la sum
:
In [345]: boolarr
Out[345]:
array([[False, False, True],
[ True, False, True],
[ True, False, True]], dtype=bool)
In [346]: boolarr.sum(axis=1)
Out[346]: array([1, 2, 2])
Del mismo modo, con np.count_nonzero
:
In [348]: np.count_nonzero(boolarr, axis=1)
Out[348]: array([1, 2, 2])
Tienes múltiples opciones. Dos opciones son las siguientes.
numpy.sum(boolarr)
numpy.count_nonzero(boolarr)
Aquí hay un ejemplo:
>>> import numpy as np
>>> boolarr = np.array([[0, 0, 1], [1, 0, 1], [1, 0, 1]], dtype=np.bool)
>>> boolarr
array([[False, False, True],
[ True, False, True],
[ True, False, True]], dtype=bool)
>>> np.sum(boolarr)
5
Por supuesto, esa es una respuesta específica de bool
. De manera más general, puedes usar numpy.count_nonzero
.
>>> np.count_nonzero(boolarr)
5