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

如何将给定NumPy数组转换为逆频率向量?

将NumPy向量转换为频率/逆频率向量

看起来你给出的示例输出其实是每个值的出现频率(即出现次数除以总长度),而不是你描述的“频率的倒数”。我先按照你提供的示例输出需求给出解决方案,同时也会补充如果确实需要频率倒数的实现方式。

方法一:生成示例中的频率向量

import numpy as np

vector = np.array([1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 1])

# 1. 统计每个值的出现次数
counts = np.bincount(vector)
# 解释:np.bincount会统计非负整数数组中每个值的出现次数,索引对应原数值,这里counts是array([0, 2, 4, 6])
# 0出现0次,1出现2次,2出现4次,3出现6次

# 2. 根据原向量的元素获取对应次数,再除以总长度得到频率
freq_vector = counts[vector] / len(vector)

# 3. 可选:保留两位小数,和示例输出一致
freq_vector_rounded = np.round(freq_vector, 2)

print(freq_vector_rounded)
# 输出:array([0.16, 0.33, 0.33, 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.5 , 0.33, 0.33, 0.16])

方法二:生成真正的逆频率向量(频率的倒数)

如果你确实需要每个值的出现频率的倒数,可以这样实现:

import numpy as np

vector = np.array([1, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 1])

# 总长度
total_len = len(vector)
# 统计每个值的出现次数
counts = np.bincount(vector)
# 计算频率的倒数:总长度 / 出现次数(因为频率=count/total_len,倒数就是total_len/count)
inv_freq_vector = total_len / counts[vector]

print(inv_freq_vector)
# 输出:array([6., 3., 3., 2., 2., 2., 2., 2., 2., 3., 3., 6.])

为什么用np.bincount?

np.bincount是NumPy中统计整数出现次数的高效函数,比循环遍历或者用collections.Counter再映射要快得多,尤其当数组规模很大时,优势更明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:32:54