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

如何高效统计大向量中1~10000数值的出现次数?

高效统计数值出现次数的优化方案

你的原方案采用双重遍历的方式,每统计一个数值就完整遍历一次数十万条数据,时间复杂度为O(K*N)(K为要统计的数值范围数,N为数据总量),操作次数可达数十亿次,效率极低。以下是两种大幅提升效率的优化方案:

方案一:使用numpy的bincount(推荐,最快)

numpy的bincount是底层C实现的计数方法,仅需遍历一次数据即可完成所有数值的统计,时间复杂度为O(N),适合处理大型numpy数组:

import numpy as np

# 若df2不是numpy数组,先转换为numpy数组
df2_np = np.array(df2)
# 直接统计所有数值的出现次数,结果数组的索引对应原数值,值为出现次数
counts = np.bincount(df2_np)

# 确保结果覆盖1到10000的所有数值(若原数据中缺少某些数值,对应位置补0)
photons = np.zeros(10001, dtype=int)
photons[:len(counts)] = counts

# 此时photons[x]即为数值x的出现次数,x范围0-10000,完全满足你"索引对应原数值"的需求

方案二:使用collections.Counter(适合普通列表)

如果你的df2是Python普通列表,可使用标准库的Counter,同样仅遍历一次数据完成统计:

from collections import Counter
import numpy as np

# 统计所有数值的出现次数,返回字典{数值: 次数}
count_dict = Counter(df2)

# 初始化结果数组,索引对应原数值
photons = np.zeros(10001, dtype=int)
for num, cnt in count_dict.items():
    if 1 <= num <= 10000:
        photons[num] = cnt

两种方案均只需遍历一次数据,效率比原方法提升数百甚至数千倍,即使后续数值量级提升,也能在数秒内完成统计。

内容的提问来源于stack exchange,提问作者In the blind

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:01:03