如何在 Python 中计算一维数组中某项的出现次数

Debolina Dasgupta 2023年1月30日 2020年3月28日
  1. 使用 collections 查找 Python 中数组中的出现次数
  2. 在 Python 中使用 NumPy 库查找数组中的出现次数
如何在 Python 中计算一维数组中某项的出现次数

在处理数组时,开发人员可能面临的主要问题之一是计算元素的出现次数。想象一下,如果你有一个电子商务网站在 10 天内售出的商品数量数组,你想知道售出 100 件以上商品的天数。

sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]

解决最简单的方法是对数组中出现 100 的次数进行计数。

使用 collections 查找 Python 中数组中的出现次数

collections 就像容器一样存储数据集合。我们可以轻松导入 collections 模块并使用计数方法。

代码:

>>>import collections
>>>sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]  
>>>print(collections.Counter(sales))
Counter({100: 4, 80: 3, 70: 2, 10: 2, 0: 1, 20: 1, 30: 1, 40: 1})

结果输出是字典类型。它列出了数组中每个元素发生了多少次。

但是,如果要打印在 sales 数组中出现 100 的次数,则可以从字典中获取它。

>>>print(collections.Counter(sales)[100])
4

Collection 模块也适用于十进制数字和字符串。

>>>floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0, 
10.0, .8, .8, .7, .7, .8]
>>>print(collections.Counter(floatarr))
Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})

>>>stringarr=["george","mark","george","steve","george"]
>>>print(collections.Counter(stringarr))
Counter({'george': 3, 'mark': 1, 'steve': 1})

在 Python 中使用 NumPy 库查找数组中的出现次数

但是,我们也可以使用 NumPy,它是 Python 中定义的库,用于处理大型数组,并且还包含大量数学函数。

你可以通过多种方式使用 NumPy 中定义的函数来返回数组中的元素计数。

NumPy 中使用 unique 函数

unique 函数与 Count 一起返回每个元素计数的字典。它也适用于十进制数字和字符串。

>>>import collections, numpy
>>>aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100, 
100, 80, 70, 10, 30, 40])

>>>unique, counts = numpy.unique(aUnique, return_counts=True)

>>>print(dict(zip(unique, counts)));  
{0: 1, 10: 2, 20: 1, 30: 1, 40: 1, 70: 2, 80: 3, 100: 4}

NumPy 中使用 count_nonzero 函数

使用 count_nonzero 返回我们正在搜索的元素的计数。它提供了易于阅读的界面和更少的代码行。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10, 
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1

count_nonzero 也适用于十进制数字和字符串。

>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,

100, 100, 80, 70, 10, 30, 40])

>>>print(numpy.count_nonzero(aCountZero == 100.1))
1

NumPy 中使用 bincount 函数-仅适用于整数数组

但是,如果你的数组只有整数,则可以使用 NumPybincount 函数。最好的地方是,它将结果作为数组返回。

>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])

>>>print(numpy.bincount(abit))

[5 3 0 0 0 0 1 0 0 1 2]

对于数组中的数字,结果以升序显示元素数。例如,数组 abit 中的 0 出现 5 次,10 出现了 2 次,它们分别 bincount 结果数组的第一项和最后一项。

相关文章 - Python Array