numpy.unique#

numpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None, *, equal_nan=True, sorted=True)[源代码]#

查找数组的唯一元素。

返回数组排序后的唯一元素。除了唯一元素之外,还有三个可选的输出:

  • 给出唯一值的输入数组的索引

  • 可以用来重建输入数组的唯一数组的索引

  • 每个唯一值在输入数组中出现的次数

参数:
ararray_like

输入数组。除非指定了 axis,否则如果它不是一维的,它将被展平。

return_indexbool, optional

如果为 True,还返回 ar 的索引(沿指定的轴,如果提供,或在展平的数组中),这些索引会生成唯一数组。

return_inversebool, optional

如果为 True,还返回唯一数组的索引(沿指定的轴,如果提供),这些索引可用于重建 ar

return_countsbool, optional

如果为 True,还返回每个唯一项在 ar 中出现的次数。

axisint 或 None, 可选

要操作的轴。如果为 None,则 ar 将被展平。如果为整数,则由给定轴索引的子数组将被展平并视为一维数组的元素,有关更多详细信息,请参见注释。使用 axis 关键字参数时,不支持包含对象的对象数组或结构化数组。默认为 None。

equal_nanbool, optional

如果为 True,则将返回数组中的多个 NaN 值合并为一个。

版本1.24中新增。

sortedbool, optional

如果为 True,则唯一元素将进行排序。元素可能实际上已经排序,即使 sorted=False,但这可能会在不通知的情况下更改。

新增于 2.3 版本。

返回:
uniquendarray

已排序的唯一值。

unique_indicesndarray, optional

原始数组中唯一值第一次出现的索引。仅当 return_index 为 True 时提供。

unique_inversendarray, optional

从唯一数组重建原始数组的索引。仅当 return_inverse 为 True 时提供。

unique_countsndarray, optional

唯一值在原始数组中出现的次数。仅当 return_counts 为 True 时提供。

另请参阅

repeat

重复数组中的元素。

sort

返回数组的已排序副本。

备注

当指定了轴时,由该轴索引的子数组将被排序。这是通过将指定的轴置于数组的第一个维度(移动轴到第一个维度以保持其他轴的顺序)来实现的,然后按 C 顺序展平子数组。然后将展平的子数组视为结构化类型,每个元素都赋予一个标签,从而得到一个可以与其他一维数组以相同方式处理的结构化类型的一维数组。结果是展平的子数组按字典顺序排序,从第一个元素开始。

1.21 版本已更改:与 np.sort 类似,NaN 将排序到值末尾。对于复数数组,所有 NaN 值都被视为等价(无论 NaN 是在实部还是虚部)。作为返回数组的代表,选择字典顺序中最小的那个 - 有关复数数组的字典顺序定义,请参见 np.sort。

2.0 版本已更改:对于多维输入,即使 axis 不为 None,也会返回 unique_inverse。这已被撤销,但可以使用 inverse.reshape(-1) 来确保与两个版本兼容。

请注意,在 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