numpy.unique#

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

查找数组的唯一元素.

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

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

  • 唯一数组的索引,用于重建输入数组

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

参数:
ararray_like

输入数组. 除非指定了 axis ,否则如果它还不是1-D,则将被展平.

return_indexbool, 可选

如果为 True,则同时返回 ar 的索引 (沿着指定的轴,如果提供,或者在扁平化数组中),这些索引会生成唯一的数组.

return_inversebool, 可选

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

return_countsbool, 可选

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

axisint 或 None,可选

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

equal_nanbool, 可选

如果为 True,则将返回数组中的多个 NaN 值折叠为一个.

在 1.24 版本加入.

sortedbool, 可选

如果为 True,则对唯一元素进行排序.即使 sorted=False ,元素在实践中也可能被排序,但这可能会在不另行通知的情况下更改.

在 2.3 版本加入.

返回:
uniquendarray

已排序的唯一值.

unique_indicesndarray, 可选

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

unique_inversendarray, 可选

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

unique_countsndarray, 可选

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

参见

repeat

重复数组的元素.

sort

返回数组的排序副本.

注释

当指定轴时,将对由轴索引的子数组进行排序.这是通过使指定的轴成为数组的第一个维度(将轴移动到第一个维度以保持其他轴的顺序),然后以 C 顺序展平子数组来完成的.然后将展平的子数组视为具有结构的类型,每个元素都被赋予一个标签,其效果是最终得到一个 1-D 的结构类型数组,可以像对待任何其他 1-D 数组一样对待它.结果是展平的子数组以字典顺序排序,从第一个元素开始.

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

在 2.0 版本发生变更: 对于多维输入, unique_inverse 将被重塑,以便可以使用 np.take(unique, unique_inverse, axis=axis) 重建输入.当 axis=None 时,结果现在不是 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])

返回 2D 数组的唯一行

>>> 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