numpy.unique#
- numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True, sorted=True)[source]#
查找数组中的唯一元素。
返回数组中排序后的唯一元素。除了唯一元素之外,还有三个可选输出:
给出唯一值的输入数组的索引
重构输入数组的唯一数组的索引
每个唯一值在输入数组中出现的次数
- 参数:
- ar类数组
输入数组。除非指定了 axis,否则如果它不是一维数组,则会被展平。
- return_index布尔值, 可选
如果为 True,则还返回 ar 的索引(如果提供,则沿指定轴;否则在展平数组中),这些索引将生成唯一数组。
- return_inverse布尔值, 可选
如果为 True,则还返回唯一数组的索引(如果提供,则为指定轴),这些索引可用于重构 ar。
- return_counts布尔值, 可选
如果为 True,则还返回 ar 中每个唯一项出现的次数。
- axis整型或 None, 可选
要操作的轴。如果为 None,ar 将被展平。如果是一个整数,则由给定轴索引的子数组将被展平,并视为具有给定轴维度的一维数组的元素,详情请参见备注。如果使用 axis 关键字参数,则不支持包含对象的对象数组或结构化数组。默认值为 None。
- equal_nan布尔值, 可选
如果为 True,则将返回数组中的多个 NaN 值合并为一个。
1.24 版本新增。
- sorted布尔值, 可选
如果为 True,则唯一元素会进行排序。即使
sorted=False
,元素在实践中也可能被排序,但这可能会在不通知的情况下更改。2.3 版本新增。
- 返回:
- uniquendarray
排序后的唯一值。
- unique_indicesndarray, 可选
原始数组中唯一值首次出现的索引。仅当 return_index 为 True 时提供。
- unique_inversendarray, 可选
从唯一数组重构原始数组的索引。仅当 return_inverse 为 True 时提供。
- unique_countsndarray, 可选
原始数组中每个唯一值出现的次数。仅当 return_counts 为 True 时提供。
备注
当指定轴时,按该轴索引的子数组将被排序。这是通过将指定轴设为数组的第一个维度(将轴移动到第一个维度以保持其他轴的顺序),然后以 C 顺序展平子数组来完成的。展平的子数组随后被视为结构化类型,每个元素都带有一个标签,其效果是最终得到一个由结构化类型组成的一维数组,可以像任何其他一维数组一样处理。结果是展平的子数组从第一个元素开始按字典序排序。
1.21 版本中的更改:与 np.sort 类似,NaN 将排到值的末尾。对于复数数组,所有 NaN 值都被视为等效(无论 NaN 位于实部还是虚部)。作为返回数组的代表,将选择字典序中最小的一个——关于复数数组的字典序如何定义,请参见 np.sort。
2.0 版本中的更改:对于多维输入,
unique_inverse
被重新塑形,以便可以使用np.take(unique, unique_inverse, axis=axis)
重构输入。当axis=None
时,结果不再是一维的。请注意,在 NumPy 2.0.0 中,当
axis
不为None
时,也会返回更高维的数组。此行为已被还原,但可以使用inverse.reshape(-1)
来确保与这两个版本的兼容性。示例
>>> import numpy as np >>> np.unique([1, 1, 2, 2, 3, 3]) array([1, 2, 3]) >>> a = np.array([[1, 1], [2, 3]]) >>> np.unique(a) array([1, 2, 3])
返回二维数组的唯一行
>>> a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]]) >>> np.unique(a, axis=0) array([[1, 0, 0], [2, 3, 4]])
返回给出唯一值的原始数组的索引
>>> a = np.array(['a', 'b', 'b', 'c', 'a']) >>> u, indices = np.unique(a, return_index=True) >>> u array(['a', 'b', 'c'], dtype='<U1') >>> indices array([0, 1, 3]) >>> a[indices] array(['a', 'b', 'c'], dtype='<U1')
从唯一值和逆索引重构输入数组
>>> a = np.array([1, 2, 6, 4, 2, 3, 2]) >>> u, indices = np.unique(a, return_inverse=True) >>> u array([1, 2, 3, 4, 6]) >>> indices array([0, 1, 4, 3, 1, 2, 1]) >>> u[indices] array([1, 2, 6, 4, 2, 3, 2])
从唯一值和计数重构输入值
>>> a = np.array([1, 2, 6, 4, 2, 3, 2]) >>> values, counts = np.unique(a, return_counts=True) >>> values array([1, 2, 3, 4, 6]) >>> counts array([1, 3, 1, 1, 1]) >>> np.repeat(values, counts) array([1, 2, 2, 2, 3, 4, 6]) # original order not preserved