问题的提出和解决方案概述
这篇文章将告诉你如何找到NumPy数组中最常见的元素。
为了使它更有趣,我们有以下运行场景。
Carrie听说Creative Prints正在招聘一个Python程序员。他们要求面试者回答几个编码问题:其中一个是提供几种寻找NumPy数组中最常见元素的方法。
问题 :我们如何编写代码来找到NumPy数组中最常见的元素*?*
我们可以通过下面的一个方案来完成这个任务。
- 方法1 :使用
bincount()
和argmax()
- 方法2 :使用
collections.Counter
- 方法3 :使用
unique()
- 方法4:使用
unique()
和zip()
- 方法5:使用
`[statistics.mode()](https://docs.python.org/3/library/statistics.html)`
准备工作
在前进之前,请确保NumPy库已经安装。
然后,在每个脚本的顶部添加以下代码。这段代码将使本文中的代码能够无误地运行。
import numpy as np
方法1:使用bincount()和argmax()
这个例子使用 bincount()
来统计一个正整数数组中每个元素的出现次数,并使用 argmax()
来返回沿某一轴的最大值。
max_value = np.bincount([4, 18, 2, 8, 3, 15, 14, 15, 20, 12, 6, 3, 15, 12, 13, 19, 14, 81, 23, 44]).argmax()
print(max_value)
上面的代码调用了NumPy的 bincount()
函数,并传给它一个(1)参数,一个随机的 list
的正整数。
然后。 argmax()
被调用来检索在 list
.结果保存到max_value
,并输出到终端。
15 |
输出的结果是正确的!这个数字在.NET中出现了3次。 list
.
注意:这个选项对负数或字符串不起作用。
方法2:使用Collections.Counter
这个例子使用了 collections
库,该库提供了容器类型,使编码人员能够轻松地存储和访问数据值。该 Counter()
函数对每个元素的计数进行了记录。
from collections import Counter
values = np.array([4, 18, 2, 8, 3, 5, 14, 5, -81, 12, 6, 3, -81, 12, 13, -81, 14, -81, 23, 44])
max_value = Counter(values)
print(max_value.most_common(1))
上面的代码导入了Python的内置 collections
库和 [`Counter()`](https://docs.python.org/3/library/collections.html#collections.Counter)
函数
然后,声明一个NumPy数组,包含一个 [list](https://blog.finxter.com/python-lists/)
的正负随机数。这将保存到values
。
接下来,调用 collections.Counter()
被调用,并将变量 `values`
作为参数。`.`
结果保存在max_value
。如果输出到终端,此时,max_value
将包含以下内容。
Counter({-81: 4, 3: 2, 5: 2, 14: 2, 12: 2, 4: 1, 18: 1, 2: 1, 8: 1, 6: 1, 13: 1, 23: 1, 44: 1}) |
最后。 most_common
(一个用于快速统计的计数器工具)被附加到了 `` `max_value` ``
并传递一个1的参数,这表示返回最高值。
一个包含最高理数的数字和相关计数的Tuples 列表返回并输出到终端。
在本例中,-81出现的次数最多,有4次。
[(-81, 4)] |
要将Tuple从List中分离出来,可以在末尾添加[0]
。
print(max_value.most_common(1)[0])
这将导致下面的输出。
(-81, 4) |
方法3:使用unique()
这个例子使用NumPy的 unique()
函数,对数组中的唯一元素进行排序,并以List格式返回其各自的计数。
values = np.array([4, 18, 2, 8, 3, 5, 14, 5, -81, 12, 6, 3, -81, 12, 13, -81, 14, -81, 23, 44])
vals, counts = np.unique(values, return_counts=True)
print(vals)
print(counts)
上面的代码声明了一个NumPy数组,包含一个 [list](https://blog.finxter.com/python-lists/)
的正负随机数。这将保存到values
。
下一步。 unique()
被调用并传递了两个参数:上面创建的NumPy数组和。 values [list](https://blog.finxter.com/python-lists/)
return_counts
如果设置为True,该函数将返回唯一值和它们各自的出现次数。结果保存在vals
和counts
。
vals
和counts
的内容将通过单独的 print()
语句输出到终端。
[-81 2 3 4 5 6 8 12 13 14 18 23 44] |
要检索最多评论的元素和其各自的计数,请使用切片法。
print(vals[0], counts[0])
上面的输出结果如下。
-81 4 |
方法4:使用unique()和zip()
这个例子使用NumPy的 unique()
和 zip()
函数,该函数接收任意数量的迭代表,并以出现次数为键 ,以总计数为值返回一个字典。
values = np.array([4, 18, 2, 8, 3, 5, 14, 5, -81, 12, 6, 3, -81, 12, 13, -81, 14, -81, 23, 44])
result = dict(zip(*np.unique(values, return_counts=True)))
print(result)
上面的代码声明了一个NumPy数组,包含一个 [list](https://blog.finxter.com/python-lists/)
的正负随机数。这将保存到values
。
然后。 zip()
被调用并传递一个(1)参数。 unique()
,它传递了两(2)个参数:上面创建的和。 values [list](https://blog.finxter.com/python-lists/)
return_counts
如果return_counts
被设置为True
,这将返回唯一值和它们各自的出现次数。
下一步。 dict()
被调用,它把上面的数据合并成一个 [Dictionary](https://blog.finxter.com/python-dictionary/)
格式。这将保存到result
,并输出到终端。
{-81: 4, 2: 1, 3: 2, 4: 1, 5: 2, 6: 1, 8: 1, 12: 2, 13: 1, 14: 2, 18: 1, 23: 1, 44: 1} |
为了检索最常见的元素,运行以下代码。
print(list(result.items())[0:1])
上面的输出如下。
[(-81, 4)] |
方法5:使用mode()
这个例子使用 mode()
库中的 statistics
库。这个函数返回在传递的参数中发现的最常见的单一元素。
from statistics import mode
def most_common(List):
return(mode(List))
values = np.array([4, 18, 2, 8, 3, 5, 14, 5, -81, 12, 6, 3, -81, 12, 13, -81, 14, -81, 23, 44])
print(most_common(values))
上面的代码调用了 mode()
从统计库中调用
然后,定义了一个名为most_common
的定义,并接受一(1)个参数,a [list](https://blog.finxter.com/python-lists/)
.该 mode()
函数被应用到 [list](https://blog.finxter.com/python-lists/)
并返回。
接下来,声明一个包含随机数的NumPy数组并保存为数值。
调用上面的most_common
函数,传递NumPy数组的值,并输出到终端。
-81 |
总结
本文提供了(5)种方法来寻找NumPy数组中最常见的元素。这些例子应该给你足够的信息来选择最适合你编码要求的方法。
祝您好运,编码愉快!