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 中出现的次数.
- 轴int 或 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 时提供.
注释
当指定轴时,将对由该轴索引的子数组进行排序. 这是通过使指定的轴成为数组的第一个维度(将轴移动到第一个维度以保持其他轴的顺序),然后按 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