NumPy中unique()函数实现数组去重与统计的详细用法

Chloe
Chloe
发布时间:2026-10-12| 2人浏览过
原创

本文详解NumPy库中unique()函数的核心参数与实操流程,涵盖一维与多维数组去重、首次出现索引提取、输入矩阵重建及元素频次统计方法。提供可直接运行的代码示例与避坑指南,帮助开发者高效完成数据清洗、重复值过滤与分布特征查询。

1. 核心功能与参数配置

numpy.unique() 是Python数据分析中用于去除数组重复元素的标准工具。该函数默认按升序返回排序后的不重复值,支持对高维数据进行轴向切分处理。使用前需确保已正确导入模块:import numpy as np。

完整函数签名如下:

numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True)
  • ar:输入数组。未设定 axis 时自动展平为一维向量处理。
  • return_index:布尔值。设为 True 时额外返回各唯一元素在原始数组中首次出现的索引位置。
  • return_inverse:布尔值。设为 True 时额外返回可通过索引重建原始数组的映射关系数组。
  • return_counts:布尔值。设为 True 时额外返回每个唯一元素在原始数据中的累计出现次数。
  • axis:整型或 None。指定计算唯一性的维度。默认为 None(全局处理)。
  • equal_nan:布尔值。控制是否将 NaN 视作相同值合并去重,默认开启。

2. 第1步:执行基础数组去重

适用于常规一维列表或二维表格清理。当 axis 为空时,无论输入几维,均会压平为一维后去重排序;传入具体轴号则保留该维度的结构特征。

第1步:执行基础一维去重

a = np.array([1, 1, 2, 2, 3, 3])
result = np.unique(a)
print(result)
# 输出: [1 2 3]

第2步:执行二维数据按行去重

在数据处理中常需剔除完全相同的记录行。设置 axis=0 即可锁定行进行比对:

b = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
result_2d = np.unique(b, axis=0)
print(result_2d)
# 输出: [[1 0 0] [2 3 4]]

3. 第2步:提取首次出现索引(return_index)

当需要定位原始数据中某个去重值的物理位置时使用。该参数返回的索引顺序与去重后的新数组严格对应。

c = np.array(['a', 'b', 'b', 'c', 'a'])
u, indices = np.unique(c, return_index=True)
print("去重结果:", u)
print("首次出现位置:", indices)
# 输出: ['a' 'b' 'c'] \n [0 1 3]

4. 第3步:重建原始输入矩阵(return_inverse)

获取逆映射索引后,可通过对新数组进行二次索引运算,完美还原原始序列的数据走向。此特性常用于状态编码转换与特征对齐。

d = np.array([1, 2, 6, 4, 2, 3, 2])
u, inv_indices = np.unique(d, return_inverse=True)
rebuilt = u[inv_indices]
print("唯一值数组:", u)
print("重建索引映射:", inv_indices)
print("还原结果:", rebuilt)
# 输出完全等于初始数组 d 的内容

5. 第4步:统计元素频次并查找高频值(return_counts)

直接替代传统的循环计数逻辑,快速完成数据分布分析与异常点检测。

# 模拟业务流水数据
e = np.array([1, 1, 1, 3, 3, 2, 2, 2, 2, 4, 5, 5])

# 同时获取唯一元素与其出现次数
elements, counts = np.unique(e, return_counts=True)
print("元素列表:", elements)
print("对应频次:", counts)

# 利用 argmax 快速定位出现最频繁的目标值
most_frequent_idx = np.argmax(counts)
mode_value = elements[most_frequent_idx]
print("最高频元素:", mode_value)
# 注:避免直接使用 python 原生 zip 迭代器配合 max() 导致容器被提前耗尽的问题,采用内置数学索引更为稳定。

6. 注意事项与常见排错

  • 内存消耗预警:处理超大数组时,去重与索引重建会在内存中生成多份副本。建议在关键节点前备份原始数据或使用分块读取策略,防止进程 OOM 崩溃。
  • 迭代器生命周期:部分开发者习惯将 return_counts 的结果直接传入 Python 原生 max() 寻找极值,这会触发 ValueError: max() arg is an empty sequence 错误。正确做法是先保存返回值变量,再调用 np.argmax() 或独立迭代。
  • 版本兼容性:NumPy v1.9 之后正式引入 axis 参数,若运行环境为极老版本需升级以支持多维轴向处理。

以上就是 NumPy unique 函数实现数组去重与统计的详细内容,更多关于 Python 数据处理的基础资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。