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

基于Numpy按位置统计元素重复频次的实现需求

带权重无放回全采样的位置频次统计

已实现的采样代码

import numpy as np

np.random.seed(seed=123)
N = 10
samples = []
P = [0.5, 0.3, 0.1, 0.1]

for i in np.arange(N):
    picks = np.random.choice(4, size=4, replace=False, p=P)
    samples.append(picks)

samples

采样结果

[array([1, 0, 3, 2]),
 array([3, 1, 0, 2]),
 array([1, 0, 3, 2]),
 array([0, 1, 3, 2]),
 array([1, 0, 2, 3]),
 array([0, 1, 3, 2]),
 array([1, 0, 3, 2]),
 array([0, 3, 1, 2]),
 array([2, 1, 0, 3]),
 array([0, 1, 2, 3])]

频次统计实现

方法1:向量化统计(高效推荐)

将采样结果转换为二维numpy数组后,通过np.bincount统计每个位置的数字频次:

# 转换为二维数组
samples_arr = np.array(samples)

# 初始化频次矩阵:行对应数字0-3,列对应位置0-3
freq_matrix = np.zeros((4, 4), dtype=int)

# 遍历每个位置统计频次
for pos in range(4):
    freq_matrix[:, pos] = np.bincount(samples_arr[:, pos], minlength=4)

print("各数字在不同位置的频次分布:")
print(freq_matrix)

运行输出:

各数字在不同位置的频次分布:
[[4 6 1 0]
 [5 3 2 0]
 [1 0 1 8]
 [0 1 6 2]]

方法2:简洁版向量化统计

用np.apply_along_axis简化代码:

samples_arr = np.array(samples)
freq_matrix = np.apply_along_axis(lambda x: np.bincount(x, minlength=4), axis=0, arr=samples_arr)
print(freq_matrix)

单独查询特定数字的位置频次

如果需要单独查看某个数字在指定位置的出现次数,直接索引频次矩阵即可:

# 数字0在首位(位置0)的次数
print(f"数字0在首位的出现次数:{freq_matrix[0, 0]}")
# 数字1在首位的次数
print(f"数字1在首位的出现次数:{freq_matrix[1, 0]}")

输出:

数字0在首位的出现次数:4
数字1在首位的出现次数:5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:20:34