# How to count the number of true elements in a NumPy bool array

Each Answer to this Q is separated by one/two green lines.

I have a NumPy array ‘boolarr’ of boolean type. I want to count the number of elements whose values are `True`. Is there a NumPy or Python routine dedicated for this task? Or, do I need to iterate over the elements in my script?

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
``````

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...
``````

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`

``````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)

``````b[b].size
``````

where `b` is the Boolean ndarray in question. It filters `b` for `True`, and then count the length of the filtered array.

This probably isn’t as efficient `np.count_nonzero()` mentioned previously, but is useful if you forget the other syntax. Plus, this shorter syntax saves programmer time.

Demo:

``````In : a = np.array([0,1,3])

In : a
Out: array([0, 1, 3])

In : a[a>=1].size
Out: 2

In : b=a>=1

In : b
Out: array([False,  True,  True])

In : b[b].size
Out: 2
`````` The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .