np.random.choice:概率不等于1

本文详细介绍了在使用numpy进行随机选择时,如何处理概率数组总和超过1的情况。通过归一化概率数组,确保其总和等于1,从而避免了ValueError错误。提供了一个具体的示例,展示了归一化过程及其效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个known issue与numpy。使用给定的容差为概率之和随机选择功能检查(here the source

的解决方案是通过将它们除以它们的总和如果总和是足够接近1

实施例归一化的概率:

>>> p=[ 1.42836755e-01, 1.42836735e-01 , 1.42836735e-01, 1.42836735e-01 
, 4.76122449e-05, 1.42836735e-01 , 4.76122449e-05 , 1.42836735e-01, 
    1.42836735e-01, 4.79122449e-05] 
>>> sum(p) 
1.0000003017347 # over tolerance limit 
>>> np.random.choice([1,2,3,4,5,6,7,8,9, 10], 4, p=p, replace=False) 

Traceback (most recent call last): 
    File "<pyshell#23>", line 1, in <module> 
    np.random.choice([1,2,3,4,5,6,7,8,9, 10], 4, p=p, replace=False) 
    File "mtrand.pyx", line 1417, in mtrand.RandomState.choice (numpy\random\mtrand\mtrand.c:15985) 
ValueError: probabilities do not sum to 1 

随着归一化:

>>> p = np.array(p) 
>>> p /= p.sum() # normalize 
>>> np.random.choice([1,2,3,4,5,6,7,8,9, 10], 4, p=p, replace=False) 
array([8, 4, 1, 6]) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值