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

NumPy数组如何提取唯一值并按元素出现频次降序排序

NumPy数组按频次降序提取唯一值实现方案

你可以通过以下两种主流方式实现需求,核心逻辑都是先统计每个元素的出现次数,再按次数对唯一值做降序排序。


方案1:纯NumPy原生实现(大数组性能最优)

全程使用NumPy内置接口完成,无额外依赖,处理百万级以上大数组时效率更高:

import numpy as np

# 目标数组
arr = np.array([5,6,7,6,1,9,10,3,1,6])
# 同时获取数组所有唯一值、以及每个唯一值对应的出现次数
unique_vals, counts = np.unique(arr, return_counts=True)
# 按出现次数做降序排序,拿到排序后的索引
sorted_index = np.argsort(-counts)
# 按排序索引取出对应唯一值即为最终结果
result = unique_vals[sorted_index]

运行后result的核心排序符合需求:出现3次的6排在首位,出现2次的1排在次位,剩余出现1次的元素排在后面。

注:np.unique默认返回的唯一值按元素值升序排列,因此同频次元素默认按值从小到大排序。如果需要调整同频次元素的排序规则(比如按原数组首次出现位置、按元素值降序排列),只需要修改np.argsort的排序键即可。


方案2:标准库Counter实现(写法最简洁)

用Python标准库collections.Counter完成统计和排序,代码更短更易读:

import numpy as np
from collections import Counter

arr = np.array([5,6,7,6,1,9,10,3,1,6])
# most_common()会直接按频次降序返回(元素, 计数)的元组列表
sorted_pairs = Counter(arr.tolist()).most_common()
# 提取元素转成NumPy数组即可
result = np.array([item[0] for item in sorted_pairs])

在Python 3.7及以上版本中,Counter会保留元素的首次插入顺序,因此同频次元素会按照其在原数组中第一次出现的顺序排列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 05:09:30