numpy中的随机数生成器
The random number generator in numpy
我正在使用 numpy.random.randn
和 numpy.random.rand
来生成随机数。我对 random.randn
和 random.rand
?
之间的区别感到困惑
两者的主要区别在docs
中提到。链接到 Doc rand and 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[=58 范围内 =],
而 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
生成的
您可以也获得转换从rand数字到 randn Python 中的数字通过应用 百分点函数 (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()
我正在使用 numpy.random.randn
和 numpy.random.rand
来生成随机数。我对 random.randn
和 random.rand
?
两者的主要区别在docs
中提到。链接到 Doc rand and 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[=58 范围内 =],
而 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
生成的
您可以也获得转换从rand数字到 randn Python 中的数字通过应用 百分点函数 (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()