如何找到NumPy数组中最常见的元素

112 阅读5分钟

问题的提出和解决方案概述

这篇文章将告诉你如何找到NumPy数组中最常见的元素。

为了使它更有趣,我们有以下运行场景。

Carrie听说Creative Prints正在招聘一个Python程序员。他们要求面试者回答几个编码问题:其中一个是提供几种寻找NumPy数组中最常见元素的方法。


💬 问题 :我们如何编写代码来找到NumPy数组中最常见的元素*?*

我们可以通过下面的一个方案来完成这个任务。


准备工作

在前进之前,请确保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)]

要将TupleList中分离出来,可以在末尾添加[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,该函数将返回唯一值和它们各自的出现次数。结果保存在valscounts

valscounts 的内容将通过单独的 print()语句输出到终端。

[-81 2 3 4 5 6 8 12 13 14 18 23 44]
[4 1 2 1 2 1 1 2 1 2 1 1 1]

要检索最多评论的元素和其各自的计数,请使用切片法。

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数组中最常见的元素。这些例子应该给你足够的信息来选择最适合你编码要求的方法。

祝您好运,编码愉快!