首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NumPy中获取随机数的最佳方法是什么?

在NumPy中获取随机数的最佳方法是什么?
EN

Stack Overflow用户
提问于 2012-07-26 23:47:43
回答 3查看 51.9K关注 0票数 23

我希望生成范围为-1, 1的随机数,并希望每个随机数都有相同的生成概率。也就是说,我不希望出现极端的可能性更小。做这件事的最好方法是什么?

到目前为止,我已经使用了:

代码语言:javascript
复制
2 * numpy.random.rand() - 1

还有:

代码语言:javascript
复制
2 * numpy.random.random_sample() - 1
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-26 23:50:47

你的方法很好。另一种方法是使用函数numpy.random.uniform()

代码语言:javascript
复制
>>> numpy.random.uniform(-1, 1, size=10)
array([-0.92592953, -0.6045348 , -0.52860837,  0.00321798,  0.16050848,
       -0.50421058,  0.06754615,  0.46329675, -0.40952318,  0.49804386])

关于极值的概率:如果它是理想化的、连续的随机数,那么得到一个极值的概率将为0。由于浮点数是连续实数的离散化,因此在现实中有一些正概率得到一些极值。这是某种形式的离散化错误,几乎可以肯定,在您的模拟中,此错误将被其他错误所掩盖。别担心了!

票数 33
EN

Stack Overflow用户

发布于 2014-08-30 21:55:46

请注意,numpy.random.rand允许在一次调用中从均匀分布生成多个样本:

代码语言:javascript
复制
>>> np.random.rand(5)
array([ 0.69093485,  0.24590705,  0.02013208,  0.06921124,  0.73329277])

它还允许生成给定形状的样本:

代码语言:javascript
复制
>>> np.random.rand(3,2)
array([[ 0.14022471,  0.96360618], 
       [ 0.37601032,  0.25528411], 
       [ 0.49313049,  0.94909878]])

如您所说,在[-1,1)之间均匀分布的随机数可以通过以下方式生成:

代码语言:javascript
复制
>>> 2 * np.random.rand(5) - 1
array([ 0.86704088, -0.65406928, -0.02814943,  0.74080741, -0.14416581])
票数 5
EN

Stack Overflow用户

发布于 2020-12-29 16:13:30

为了确保包含范围-1,1的极值,我随机生成一个整数数组,该数组的范围为[0,200000001[.后一个整数的值取决于所需的最终numpy数据类型。在这里,我使用numpy float64,这是用于numpy数组的默认类型。然后,我将numpy数组除以100000000,以生成浮点数并以单位减去。这样做的代码是:

代码语言:javascript
复制
>>> import numpy as np
>>> number = ((np.random.randint(low=0, high=200000001, size=5)) / 100000000) - 1
>>> print(number)
[-0.65960772  0.30378946 -0.05171788 -0.40737182  0.12998227]

确保不要将这些numpy浮点数转换为python浮点数,以避免舍入错误。

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

https://stackoverflow.com/questions/11673124

复制
相关文章

相似问题

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