首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用numpy在分段间隔上生成随机数

如何使用numpy在分段间隔上生成随机数
EN

Stack Overflow用户
提问于 2019-05-21 10:13:10
回答 4查看 2K关注 0票数 4

我使用python中的numpy模块来生成随机数。当我需要在一个连续的时间间隔内生成随机数时,比如a,b,我会使用

代码语言:javascript
复制
(b-a)*np.random.rand(1)+a

但是现在我需要在区间a,b和c,d中生成一个均匀的随机数,我该怎么办?

我想生成一个随机数,它在所有间隔的长度上都是一致的。我没有选择一个概率相等的区间,然后在区间内生成一个随机数。如果a,b和c,d在长度上相等,这种使用是没有问题的,但是当间隔的长度不相等时,这种方法产生的随机数不是完全均匀的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-05-21 10:39:53

你可以这样做

代码语言:javascript
复制
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])
票数 3
EN

Stack Overflow用户

发布于 2019-05-21 10:17:24

您可以使用

代码语言:javascript
复制
np.random.uniform(a,b)

对于a和b之间的随机数(包括a但不包括b)

所以对于a,b和c,d中的随机数,你可以使用

代码语言:javascript
复制
np.random.choice( [np.random.uniform(a,b) , np.random.uniform(c,d)] )
票数 1
EN

Stack Overflow用户

发布于 2019-05-21 13:58:21

这里有一个食谱:

代码语言:javascript
复制
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(非重叠)间隔上的,即使它们具有不同的大小。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56230232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档