【问题标题】:Why is Numpy random.uniform not so uniform? [duplicate]为什么 Numpy random.uniform 不那么统一? [复制]
【发布时间】:2018-09-24 07:48:30
【问题描述】:

我想在 0.00001 到 100000 之间创建随机点,我尝试使用以下代码

np.random.uniform(0.00001,100000,100)

我有两个问题。 第一个问题是我想要一个像 random_state = 123 这样的随机种子,这样我就可以复制我的代码。 第二个问题与 random.uniform 的均匀性有关。尽管有函数名称,但数组似乎不是从均匀分布中绘制的(见图)。

编辑:我想我没有正确解释第二个问题。我希望我的值从 1e-5 均匀分布到 1e+5。结果是均匀分布的,但它不包含非常小的数字。这就是为什么我将其更改为

temp = 10 ** np.random.uniform(-5,5,100) 

这解决了我打算在第二个问题中解决的问题。

【问题讨论】:

  • 在如此大的时间间隔内,眼睛测试对于均匀性不是很好 - 看看np.histogram 有更多样本。
  • 我敢打赌,您期待的是数字长度的均匀分布,好像在 1 到 10 之间滚动一个值与在 10000 到 100000 之间滚动一个值一样可能。

标签: python arrays numpy random random-seed


【解决方案1】:

第一个问题: numpy 中的种子是这样完成的

>>> from numpy.random import RandomState
>>> rs = RandomState(123)
>>> rs.uniform(0.00001,100000,100)[:3]
array([69646.91856282, 28613.93350218, 22685.14536415])
>>> rs.uniform(0.00001,100000,100)[:3]
array([51312.81542477, 66662.45501974, 10590.84851462])
>>> rs.seed(123)  # resetting state of the PRNG
>>> rs.uniform(0.00001,100000,100)[:3]
array([69646.91856282, 28613.93350218, 22685.14536415])

不要使用numpy.random.seed,因为它设置了一个全局状态。有关这样做的问题的信息,请查看评论线程here

第二个问题:在我看来足够统一。有什么问题?

【讨论】:

  • 加 1:谢谢您的回答。你解决了 random.seed 问题。我想我没有正确表达我的第二个问题。我“解决”了它并编辑了我的问题。
  • @MrYouMath 你不应该编辑问题,你应该发布一个答案
猜你喜欢
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
相关资源
最近更新 更多