J'ai un tableau NumPy 'boolarr' de type booléen. Je veux compter le nombre d'éléments dont les valeurs sont True
. Existe-t-il une routine NumPy ou Python dédiée à cette tâche? Ou dois-je parcourir les éléments de mon script?
Vous avez plusieurs options. Deux options sont les suivantes.
numpy.sum(boolarr)
numpy.count_nonzero(boolarr)
Voici un exemple:
>>> 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
Bien sûr, c’est une réponse spécifique à bool
. Plus généralement, vous pouvez utiliser numpy.count_nonzero
.
>>> np.count_nonzero(boolarr)
5
Cette question a résolu une question assez similaire pour moi et j'ai pensé que je devrais partager:
En raw python, vous pouvez utiliser sum () pour compter les valeurs True dans un dict:
>>> sum([True,True,True,False,False])
3
Mais ça ne marchera pas:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
Cela aidera peut-être quelqu'un.
En termes de comparaison de deux tableaux numpy et de comptage du nombre de correspondances (prédiction de classe correcte dans l'apprentissage automatique, par exemple), j'ai trouvé utile l'exemple suivant pour deux dimensions:
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])
qui peut être étendu aux dimensions D.
Les résultats sont:
Prédiction:
[[1 2]
[2 0]
[2 0]
[1 2]
[1 2]]
Cible:
[[0 1]
[1 0]
[2 0]
[0 0]
[2 1]]
Nombre de prédictions correctes pour D = 1: 1
Nombre de prédictions correctes pour D = 2: 2
Si vous souhaitez effectuer un nombre par ligne, fournissez axis=1
à sum
:
boolarr
# array([[False, False, True],
# [ True, False, True],
# [ True, False, True]], dtype=bool)
boolarr.sum(axis=1)
# array([1, 2, 2])
De même, avec np.count_nonzero
:
np.count_nonzero(boolarr, axis=1)
# array([1, 2, 2])