如何计算 NumPy 数组中唯一值的频率?

pythonnumpyprogramming

分析 NumPy 数组中唯一值的频率是数据分析中的常见任务。它提供了有关元素分布和出现的宝贵见解,从而实现了有效的数据探索和预处理。在本文中,我们将探索各种方法来计算 NumPy 数组中唯一值的频率。通过利用内置的 NumPy 函数和外部库(如 pandas 和 collections),我们将指导您逐步实现这些技术。通过本综合指南,您将获得必要的知识,以准确分析和从 NumPy 数组中提取有意义的信息。

方法 1:使用 np.unique() 函数

NumPy 提供了 np.unique() 函数,该函数返回数组中排序的唯一元素。通过指定 return_counts=True 参数,它还会返回每个唯一元素的计数。让我们看看如何使用此函数来计算 NumPy 数组中唯一值的频率:

import numpy as np

# 创建 NumPy 数组
arr = np.array([1, 2, 3, 2, 4, 1, 3, 4, 4, 4])

# 获取唯一值及其计数
unique_values, counts = np.unique(arr, return_counts=True)

# 打印结果
for value, count in zip(unique_values, counts):
    print(f"{value} occurs {count} times")

输出

1 occurs 2 times
2 occurs 2 times
3 occurs 2 times
4 occurs 4 times

通过使用 np.unique() 函数,我们获得两个数组:包含唯一元素的 unique_values 和包含相应频率的 counts。然后我们可以使用 zip() 函数同时迭代这些数组并打印结果。

方法 2:使用 collections.Counter() 函数

另一种计算 NumPy 数组中唯一值频率的方法是使用 collections.Counter() 函数。此函数是 Python 标准库的一部分,提供了一种计算集合中元素出现次数的有效方法。以下是如何使用此功能的示例:

import numpy as np
from collections import Counter

# 创建 NumPy 数组
arr = np.array([1, 2, 3, 2, 4, 1, 3, 4, 4, 4])

# 计算唯一值的频率
counts = Counter(arr)

# 打印结果
for value, count in counts.items():
    print(f"{value} occurs {count} times")

输出

1 occurs 2 times
2 occurs 2 times
3 occurs 2 times
4 occurs 4 times

应用 Counter(arr) 后,NumPy 数组将转换为类似字典的对象,其中键表示唯一值,值表示相应的频率。然后可以在迭代 Counter 对象的内容后打印结果。

方法 3:使用 np.bincount() 函数

我们可以使用 np.bincount() 函数来计算非负整数 NumPy 数组中不同值的频率。此函数创建一个新数组并计算原始数组中每个非负整数的实例数。这个新数组中的索引代表不同的值,而附带的项目表示它们的频率。以下是如何应用此策略的示例:

import numpy as np

# 创建 NumPy 数组
arr = np.array([1, 2, 3, 2, 4, 1, 3, 4, 4, 4])

# 获取唯一值的频率
counts = np.bincount(arr)

# 打印结果
for value, count in enumerate(counts):
    if count > 0:
        print(f"{value} occurs {count} times")

输出

1 occurs 2 times
2 occurs 2 times
3 occurs 2 times
4 occurs 4 times

在此方法中,我们将 np.bincount() 函数应用于 NumPy 数组。生成的数组 counts 包含数组中存在的每个非负整数的频率。然后,我们可以使用 enumerate() 函数迭代 counts 数组的索引和相应元素,并打印计数大于零的值。

方法 4:使用 pandas.value_counts() 函数

如果您安装了 pandas 库,则可以利用其 value_counts() 函数来计算 NumPy 数组中唯一值的频率。此函数返回一个 Series 对象,其中包含唯一值作为索引及其相应的频率作为值。以下是示例:

import numpy as np
import pandas as pd

# 创建 NumPy 数组
arr = np.array([1, 2, 3, 2, 4, 1, 3, 4, 4, 4])

# 将数组转换为 Series
series = pd.Series(arr)

# 获取唯一值的频率
counts = series.value_counts()

# 打印结果
for value, count in counts.items():
    print(f"{value} occurs {count} times")

输出

4 occurs 4 times
1 occurs 2 times
3 occurs 2 times
2 occurs 2 times

我们可以使用 value_counts() 函数通过将 NumPy 数组转换为 pandas Series 来创建具有唯一值及其伴随频率的 Series 对象。在遍历 Series 对象的项后可以打印结果。

结论

在本文中,我们介绍了用于计算 NumPy 数组中唯一值频率的各种方法,例如 np.unique()、collections.Counter()、np.bincount() 和 pandas.value_counts()。这些方法根据您的特定要求和可用库提供不同的优势。通过应用这些技术,您可以有效地从数据中获得见解并高效地进行有意义的分析。


相关文章