numpy中的随机数发生器

numpy中的随机数发生器,numpy,ipython,Numpy,Ipython,我正在使用numpy.random.randn和numpy.random.rand生成随机数。我混淆了random.randn和random.rand?这两者之间的主要区别在文档中提到。和的链接 对于numpy.rand,您可以从0-1范围内的均匀分布生成随机值 但是对于numpy.randn您可以从正态分布生成随机值,平均值为0,方差为1。 只是一个小例子 >>> import numpy as np >>> np.random.rand(10) array

我正在使用
numpy.random.randn
numpy.random.rand
生成随机数。我混淆了
random.randn
random.rand

这两者之间的主要区别在
文档中提到。和的链接

对于
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
给我的值是
均值=0
方差=1

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

>>> a = np.random.rand(100)
>>> b = np.random.randn(100)
>>> np.mean(a)
0.50570149531258946
>>> np.mean(b)
-0.010864958465191673
>>>
您可以看到
的平均值接近
0.50
,这是使用
兰德
生成的。另一方面,
的平均值接近
0.0
,这是使用
randn
生成的。您还可以通过应用百分比点函数(ppf)在Python中实现从rand数到randn数的转换对于随机变量分布为~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()