gpt4 book ai didi

python - 不连续集合中的 numpy.random.uniform

转载 作者:行者123 更新时间:2023-12-05 00:57:08 26 4
gpt4 key购买 nike

我想在 (a,b)∪(c,d)∪...∪(e,f) 形式的集合中均匀生成一个随机数,其中 a < b < c ... 和 a > 0,并且 f < 1。这可以通过 numpy.random.uniform 函数实现吗?

最佳答案

如果你只需要选择一次就可以使用np.random.choice :

import numpy as np
a, b, c, d = 0, 0.3, 0.7, 1

# Specify relative probabilities
prob = np.array([b-a, d-c])
prob = prob/prob.sum() # Normalize to sum up to one

r = np.random.choice([np.random.uniform(a, b), np.random.uniform(c, d)],
p=prob)

r
0.9662186527199109

如果需要生成很多值:

n=10
R = np.array([np.random.choice([np.random.uniform(a, b),np.random.uniform(c, d)],
p=prob)
for _ in range(n)])

R
array([0.19130148, 0.24858629, 0.75106557, 0.11057559, 0.9276096 ,
0.01849698, 0.89433504, 0.99455349, 0.10128313, 0.23325187])

我们可以看到添加概率参数产生了预期的结果:

a,b,c,d,e,f = 0, .1, .2,.25, .5, 1
prob = np.array([b-a, d-c, f-e])
prob = prob/prob.sum()
n=10_000
R = np.array([np.random.choice([np.random.uniform(a, b),
np.random.uniform(c, d),
np.random.uniform(e, f)],
p=prob)
for _ in range(n)])

print(prob)
array([0.15384615, 0.07692308, 0.76923077])

print(R[np.logical_and(R>a, R<b)].size/n, R[np.logical_and(R>c, R<d)].size/n, R[np.logical_and(R>e, R<f)].size/n)
0.1537 0.0709 0.7754

关于python - 不连续集合中的 numpy.random.uniform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61158448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com