我有一个布尔类型的NumPy数组'boolarr'。我想计算值为True的元素的数量。是否有NumPy或Python例程专门用于此任务?或者,我需要遍历脚本中的元素吗?
当前回答
对于1D数组,这对我来说是有效的:
import numpy as np
numbers= np.array([3, 1, 5, 2, 5, 1, 1, 5, 1, 4, 2, 1, 4, 5, 3, 4,
5, 2, 4, 2, 6, 6, 3, 6, 2, 3, 5, 6, 5])
numbersGreaterThan2= np.count_nonzero(numbers> 2)
其他回答
b[b].size
其中b是问题中的布尔ndarray。它将b过滤为True,然后计算过滤后数组的长度。
这可能不像前面提到的np.count_nonzero()那样有效,但如果您忘记了其他语法,则很有用。此外,这种更短的语法节省了程序员的时间。
演示:
In [1]: a = np.array([0,1,3])
In [2]: a
Out[2]: array([0, 1, 3])
In [3]: a[a>=1].size
Out[3]: 2
In [5]: b=a>=1
In [6]: b
Out[6]: array([False, True, True])
In [7]: b[b].size
Out[7]: 2
你有多种选择。以下是两种选择。
boolarr.sum()
numpy.count_nonzero(boolarr)
这里有一个例子:
>>> 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
当然,这是一个特定于boolean的答案。更一般地,可以使用numpy.count_nonzero。
>>> np.count_nonzero(boolarr)
5
这个问题为我解决了一个非常相似的问题,我认为我应该分享:
在原始python中,你可以使用sum()来计算列表中的True值:
>>> sum([True,True,True,False,False])
3
但这行不通:
>>> sum([[False, False, True], [True, False, True]])
TypeError...
对于1D数组,这对我来说是有效的:
import numpy as np
numbers= np.array([3, 1, 5, 2, 5, 1, 1, 5, 1, 4, 2, 1, 4, 5, 3, 4,
5, 2, 4, 2, 6, 6, 3, 6, 2, 3, 5, 6, 5])
numbersGreaterThan2= np.count_nonzero(numbers> 2)
boolarr.sum(axis=1 or axis=0)
Axis = 1将输出一行中的真值个数,Axis = 0将计算列中的真值个数 所以
boolarr[[true,true,true],[false,false,true]]
print(boolarr.sum(axis=1))
将 (3,1)
推荐文章
- 我如何在python中使用selenium webdriver滚动网页?
- 指定并保存具有精确像素大小的图形
- 在Java中数组是按值传递还是按引用传递?
- 如何更新SQLAlchemy行条目?
- equals vs Arrays。Java中的等号
- name 'reduce'在Python中没有定义
- 如何计算一个NumPy bool数组中的真实元素的数量
- 如何找到一个值的数组索引?
- 在python中,在函数结束(例如检查失败)之前退出函数(没有返回值)的最佳方法是什么?
- 在Python中检查一个单词是否在字符串中
- Python glob多个文件类型
- 如何可靠地打开与当前运行脚本在同一目录下的文件
- Python csv字符串到数组
- 如何在Python中进行热编码?
- 如何嵌入HTML到IPython输出?