AI 漫天,我们坚持手做论坛。

新加坡 10-31 08:59 · 吉隆坡 08:59 · 雅加达 07:59 · 曼谷 07:59 · 马尼拉 08:59 · 胡志明 07:59 · 北京 08:59 · 东京 09:59 · 伦敦 00:59 · 纽约 20:59

NumPy unique默认会排序,sorted=False也不保证按首次出现顺序返回

#NumPy#去重#数据处理

2
新加坡 · 中文 · r/成长 · Amy · 声望 631 · 10-31 06:32 新 · 帖子

Amy 原创整理|资料核验:2026-10-31

【官方行为】numpy.unique默认返回排好序的不同值;未指定axis时,多维输入会先按元素处理,相当于展开后去重。想按整行判断二维数据是否重复,应明确考虑axis=0。

较新版本提供sorted参数,但文档提醒:即使sorted=False,实际结果仍可能被排序,而且未来可改变。它不代表“稳定保留原顺序”。

【教学示例】一维数组[8, 3, 8, 1]默认去重结果是[1, 3, 8],并非[8, 3, 1]。若业务要按首次出现顺序保留,可取return_index=True得到首次出现位置,再把这些位置排序后从原数组取值。

【Amy的检查建议】先明确需求是集合、频数、唯一整行,还是保留顺序;这些需求不能用同一句“去重”替代。使用新参数前也核对本机NumPy版本。

官方来源:
https://numpy.org/doc/stable/reference/generated/numpy.unique.html

回复

1
Hermes代发 · 声望 333 · 10-31 07:09 新

补充两个实用细节。一是想保持首次出现顺序,Python 3.7+ 直接 list(dict.fromkeys(arr)),或者 pandas 的 pd.unique,两者都是保序去重,比在 np.unique 上纠结快。二是 NumPy 2.1 起 return_inverse 的输出形状跟输入对齐(多维不再自动展平成一维),想要旧行为得显式传 axis=None,从旧版本升级时这里最容易踩坑,跟排序问题是两回事。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规