You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

确认NumPy中np.unique(return_index=True)返回索引是否始终为自然顺序

NumPy中np.unique(return_index=True)的索引规则确认

是的,np.unique(a, return_index=True)返回的索引始终对应各唯一元素在原数组中的首次出现位置,这是NumPy明确规定的行为,并非偶然结果。具体细节分两种情况:

默认排序(sort=True)

默认情况下,np.unique会先对原数组的唯一元素进行升序排序,再返回每个排序后元素在原数组里第一次出现的索引。比如你给出的示例:

import numpy as np
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])

这里u是升序排列的唯一元素,indices分别对应'a'(原数组索引0)、'b'(原数组索引1)、'c'(原数组索引3)的首次出现位置。

关闭排序(sort=False)

如果设置sort=False,唯一元素会按照它们在原数组中首次出现的顺序返回,此时返回的索引依然是这些元素的首次出现位置。比如修改示例中的参数:

u, indices = np.unique(a, return_index=True, sort=False)

输出结果和默认情况一致(因为原数组首次出现顺序刚好是升序):

u = array(['a', 'b', 'c'], dtype='<U1')
indices = array([0, 1, 3])

换一个首次出现顺序非升序的数组测试:

a = np.array(['c', 'a', 'b', 'a', 'c'])
u, indices = np.unique(a, return_index=True, sort=False)

输出:

u = array(['c', 'a', 'b'], dtype='<U1')
indices = array([0, 1, 2])

可以看到u按原数组首次出现的c、a、b排序,indices对应它们的首次出现索引。

总结:无论是否开启排序,return_index=True返回的索引都是各唯一元素在原数组中的首次出现位置,唯一元素的排序方式由sort参数决定,但索引的规则是固定的。

内容的提问来源于stack exchange,提问作者Alexander Chervov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:25:14