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()