How to count the number of true elements in a NumPy bool array
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Dreamlands
--
Chapters
00:00 How To Count The Number Of True Elements In A Numpy Bool Array
00:24 Accepted Answer Score 357
00:52 Answer 2 Score 34
01:12 Answer 3 Score 5
01:53 Answer 4 Score 0
02:10 Thank you
--
Full question
https://stackoverflow.com/questions/8364...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #arrays #numpy #count #boolean
#avk47
ACCEPTED ANSWER
Score 357
You have multiple options. Two options are the following.
boolarr.sum()
numpy.count_nonzero(boolarr)
Here's an example:
>>> 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)
>>> boolarr.sum()
5
Of course, that is a bool-specific answer. More generally, you can use numpy.count_nonzero.
>>> np.count_nonzero(boolarr)
5
ANSWER 2
Score 34
That question solved a quite similar question for me and I thought I should share :
In raw python you can use sum() to count True values in a list :
>>> sum([True,True,True,False,False])
3
But this won't work :
>>> sum([[False, False, True], [True, False, True]])
TypeError...
ANSWER 3
Score 5
In terms of comparing two numpy arrays and counting the number of matches (e.g. correct class prediction in machine learning), I found the below example for two dimensions useful:
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])
which can be extended to D dimensions.
The results are:
Prediction:
[[1 2]
 [2 0]
 [2 0]
 [1 2]
 [1 2]]
Target:
[[0 1]
 [1 0]
 [2 0]
 [0 0]
 [2 1]]
Count of correct prediction for D=1: 1
Count of correct prediction for D=2: 2
ANSWER 4
Score 0
boolarr.sum(axis=1 or axis=0)
axis = 1 will output number of trues in a row and axis = 0 will count number of trues in columns so
boolarr[[true,true,true],[false,false,true]]
print(boolarr.sum(axis=1))
will be (3,1)