我使用numpy.random.randn
和numpy.random.rand
生成随机数。我对random.randn
和random.rand
答案 0 :(得分:3)
docs
中提到了两者之间的主要区别。指向Doc rand和Doc 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()