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

匿名 (未验证) 提交于 2019-12-03 01:39:01

问题:

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?

回答1:

You have multiple options. Two options are the following.

numpy.sum(boolarr) 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)  >>> np.sum(boolarr) 5 

Of course, that is a bool-specific answer. More generally, you can use numpy.count_nonzero.

>>> np.count_nonzero(boolarr) 5 


回答2:

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 dict :

>>> sum([True,True,True,False,False]) 3 

But this won't work :

>>> sum([[False, False, True], [True, False, True]]) TypeError... 

Maybe this will help someone.



回答3:

If you wish to do a per-row count, supply axis=1 to 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]) 

Similarly, with np.count_nonzero:

In [348]: np.count_nonzero(boolarr, axis=1) Out[348]: array([1, 2, 2]) 


回答4:

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



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!