tamaño repetidos multiplicacion matrices lista funcion elementos contar bidimensionales arreglos arreglo array arange agregar python arrays numpy count boolean

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