numpy中的随机数生成器

时间:2015-04-22 18:35:17

标签: numpy ipython

我使用numpy.random.randnnumpy.random.rand生成随机数。我对random.randnrandom.rand

之间的区别感到困惑

2 个答案:

答案 0 :(得分:3)

docs中提到了两者之间的主要区别。指向Doc randDoc randn

的链接

对于 numpy.rand ,您可以获得从均匀分布 在0 - 1

中生成的随机值

但是对于 numpy.randn ,您会获得正态分布生成的随机值 ,均值为0且方差为1。

只是一个小例子。

>>> import numpy as np
>>> np.random.rand(10)
array([ 0.63067838,  0.61371053,  0.62025104,  0.42751699,  0.22862483,
        0.75287427,  0.90339087,  0.06643259,  0.17352284,  0.58213108])
>>> np.random.randn(10)
array([ 0.19972981, -0.35193746, -0.62164336,  2.22596365,  0.88984545,
       -0.28463902,  1.00123501,  1.76429108, -2.5511792 ,  0.09671888])
>>> 

正如您所看到 rand 在0-1 中为我提供了值

randn 为我提供 mean == 0 variance == 1

的值

为了进一步解释,让我生成一个足够大的样本:

>>> a = np.random.rand(100)
>>> b = np.random.randn(100)
>>> np.mean(a)
0.50570149531258946
>>> np.mean(b)
-0.010864958465191673
>>>

您可以看到 a 的平均值接近0.50,这是使用 rand 生成的。另一方面, b 的平均值接近0.0,这是使用 randn

生成的

答案 1 :(得分:0)

您可以 rand 号码获取转换到Python中 randn 的数字< b>正态分布的百分点函数(ppf)随机变量分布为~N(0,1)。这是一种众所周知的将任意均匀随机变量(0,1)投影到ppf上的方法,以获得所需累积分布的随机变量。

在Python中,我们可以将该过程可视化如下:

from numpy.random import rand
import matplotlib.pyplot as plt
from scipy.stats import norm

u = rand(100000)   # uniformly distributed rvs
z = norm.ppf(u)    # ~ N(0,1) rvs

plt.hist(z,bins=100)
plt.show()

enter image description here