我使用python中的numpy模块来生成随机数。当我需要在一个连续的时间间隔内生成随机数时,比如a,b,我会使用
(b-a)*np.random.rand(1)+a但是现在我需要在区间a,b和c,d中生成一个均匀的随机数,我该怎么办?
我想生成一个随机数,它在所有间隔的长度上都是一致的。我没有选择一个概率相等的区间,然后在区间内生成一个随机数。如果a,b和c,d在长度上相等,这种使用是没有问题的,但是当间隔的长度不相等时,这种方法产生的随机数不是完全均匀的。
发布于 2019-05-21 10:39:53
你可以这样做
a,b,c,d = 1,2,7,9
N = 10
r = np.random.uniform(a-b,d-c,N)
r += np.where(r<0,b,c)
r
# array([7.30557415, 7.42185479, 1.48986144, 7.95916547, 1.30422703,
# 8.79749665, 8.19329762, 8.72669862, 1.88426196, 8.33789181])发布于 2019-05-21 10:17:24
您可以使用
np.random.uniform(a,b)对于a和b之间的随机数(包括a但不包括b)
所以对于a,b和c,d中的随机数,你可以使用
np.random.choice( [np.random.uniform(a,b) , np.random.uniform(c,d)] )发布于 2019-05-21 13:58:21
这里有一个食谱:
def random_multiinterval(*intervals, shape=(1,)):
# FIXME assert intervals are valid and non-overlapping
size = sum(i[1] - i[0] for i in intervals)
v = size * np.random.rand(*shape)
res = np.zeros_like(v)
for i in intervals:
res += (0 < v) * (v < (i[1] - i[0])) * (i[0] + v)
v -= i[1] - i[0]
return res
In [11]: random_multiinterval((1, 2), (3, 4))
Out[11]: array([1.34391171])
In [12]: random_multiinterval((1, 2), (3, 4), shape=(3, 3))
Out[12]:
array([[1.42936024, 3.30961893, 1.01379663],
[3.19310627, 1.05386192, 1.11334538],
[3.2837065 , 1.89239373, 3.35785566]])注意:这是均匀分布在N(非重叠)间隔上的,即使它们具有不同的大小。
https://stackoverflow.com/questions/56230232
复制相似问题