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

关于numpy.random.choice生成数组不符合预期分布的咨询

关于numpy.random.choice抽样结果与预期分布偏差的问题

嘿,我来帮你搞明白这个情况~

首先得明确一个关键点:你设置的p=[0.45, 0.45, 0.10]是理论概率期望,不是说单次抽样(这里是100个元素)就一定会严格出现45、45、10次的结果。随机抽样本身就带有波动性,就像你抛10次硬币,很少会正好得到5次正面5次反面,但抛1000次的话,结果就会很接近50%的比例。你现在的样本量只有100,出现±几次的偏差完全是正常的抽样误差,比如你给出的几次结果里,30的次数在9-14之间,离10的期望值其实很近,这都是合理的波动范围。

如果你的需求是必须严格得到45次10、45次22、10次30,而不是概率抽样的话,可以换一种思路:先构造一个完全符合次数要求的数组,再打乱顺序重塑成二维数组。具体代码如下:

import numpy as np

# 先构造包含指定次数的一维数组
full_arr = np.concatenate([
    np.full(45, 10),   # 45个10
    np.full(45, 22),   # 45个22
    np.full(10, 30)    # 10个30
])

# 随机打乱数组顺序
np.random.shuffle(full_arr)

# 重塑为10x10的二维数组
choice = full_arr.reshape(10, 10)

# 验证结果
unique, counts = np.unique(choice, return_counts=True)
print(dict(zip(unique, counts)))  # 每次运行都会得到{10: 45, 22: 45, 30: 10}

要是你还是想保留概率抽样的逻辑,只是希望结果更接近理论期望,那可以试试增大样本量——比如生成1000x1000的数组,这时候统计结果会越来越接近你设置的0.45、0.45、0.1比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:31