randn和normal之间的Python差异
我正在使用Python的randn和normal之间的Python差异,python,numpy,Python,Numpy,我正在使用Python的numpy.random模块中的randn和normal函数。这些函数与我在手册中读到的函数非常相似(它们都与高斯分布有关),但有没有更细微的差异需要我注意?如果是这样,在什么情况下使用特定函数会更好?randn似乎给出了一些标准化正态分布的分布(平均值0和方差1)正常采用更多参数进行更多控制。因此,rand似乎只是一个方便的函数描述 查看您在问题中链接的文档,我将强调一些关键区别: 正常: numpy.random.normal(loc=0.0, scale=1.0,
numpy.random
模块中的randn
和normal
函数。这些函数与我在手册中读到的函数非常相似(它们都与高斯分布有关),但有没有更细微的差异需要我注意?如果是这样,在什么情况下使用特定函数会更好?randn
似乎给出了一些标准化正态分布的分布(平均值0和方差1)<代码>正常采用更多参数进行更多控制。因此,rand
似乎只是一个方便的函数描述
查看您在问题中链接的文档,我将强调一些关键区别:
正常:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
# Draw random samples from a normal (Gaussian) distribution.
# Parameters :
# loc : float -- Mean (“centre”) of the distribution.
# scale : float -- Standard deviation (spread or “width”) of the distribution.
# size : tuple of ints -- Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn.
因此,在本例中,您将生成一个通用正态分布(稍后将详细说明这意味着什么)
兰登:
numpy.random.randn(d0, d1, ..., dn)
# Return a sample (or samples) from the “standard normal” distribution.
# Parameters :
# d0, d1, ..., dn : int, optional -- The dimensions of the returned array, should be all positive. If no argument is given a single Python float is returned.
# Returns :
# Z : ndarray or float -- A (d0, d1, ..., dn)-shaped array of floating-point samples from the standard normal distribution, or a single such float if no parameters were supplied.
在本例中,您正在生成一个特定的正态分布,即标准分布
(简介)数学
现在,一些数学,这是真正需要得到你的问题的核心:
正态分布是一种分布,其中值更可能出现在平均值附近。自然界中有很多这样的案例。例如,达拉斯6月份的平均高温是95华氏度,一年内可能达到100华氏度,甚至105华氏度,但更典型的情况是接近95华氏度或97华氏度。类似地,它可能低至80,但85或90更有可能
因此,它从根本上不同于,比如说,均匀分布(滚动诚实的六面模具)
标准正态分布只是一个正态分布,其中平均值为0,方差(变量的数学项)为1 所以 和写作完全一样
numpy.random.randn(10, 10)
因为numpy.random.normal
的默认值(loc=0,scale=1)实际上是标准分布
历史
为了让事情变得更加混乱,如以下所述:
与
np.random.normal(loc= mu, scale= sigma, ...)
问题是真正的专业化:在统计学中,高斯分布非常普遍,以至于出现了一些术语来进行讨论:
- 许多分布都是高斯分布,以至于高斯分布被认为是正态分布
- 好的建模,尤其是线性建模,要求所有元素“大小相同”(均值和方差相似)。因此,将分布重新划分为
和平均值=0
成为标准实践方差=1
*最后一点注意:我用“方差”一词从数学上描述了方差。有些人说标准差。方差仅仅等于标准差的平方。由于标准分布的方差=1,在这个标准分布的例子中,
方差==标准偏差
继@Mike Williamson关于方差、标准偏差的解释之后,我被发现试图计算
这里提供的例子是:
>>将numpy作为np导入
>>>2.5*np.随机。随机数n(2,4)+3
数组([-1.13788245,2.54061141,-0.12769502,7.46200906],
[-0.4780766 , 1.70417835, 5.43802441, 4.71764135]])
这里需要注意的一点是,正态分布遵循符号N(均值,方差),而要使用.randn()
实现,需要将标准偏差或σ相乘,并将均值或μ添加到Numpy方法的标准正态输出中
注:
sqrt(方差)=标准偏差或sigma
例如
sqrt(6.25)=2.5
因此:
sigma*numpy.random.randn(2,4)+mean
我觉得它们不一样<代码>正态:从正态(高斯)分布中随机抽取样本randn
:返回一个随机矩阵,其中包含来自“标准法线”的数据distribution@hughdbrown相同的分布,稍有不同的使用方式。他们最终调用相同的C函数(rk_gauss
)。我认为,randn
的存在主要是为了让MATLAB皈依者快乐。MATLABrandn
似乎或多或少是相同的。啊,它们是在什么文件中定义的?我想是这样的,并在源代码中查找了一些,但我没有找到它。numpy/random/mtrand/distributions.c
您的答案似乎很有趣。但是,若测量,比如说,是某个物体的速度,那个么如何产生噪声呢?噪波应仅包含正值。。?!如果是这样的话,正态分布就不能产生正值,对吗?我不确定我是否遵循了@Spider。如果我在跟踪你,你也会问值怎么会低于平均值。标准偏差的定义是平均值周围的变化。也就是说,在它上面和下面。这里没有足够的空间来进入它,但是看看,或者,哦,现在我明白你的意思了:是的,一个“速度”(不是速度,它是一个向量)必须只有正数。是的,正态分布允许负数。因此,正如你的直觉已经告诉你的那样,速度并不遵循正态分布。还有许多其他类型的分布,如泊松分布或二项式分布。如何用一些值来缩放randn给出的值,并将其视为sigma?正态分布的定义似乎不允许如此简单的缩放。@Nimi是的,当您执行变量替换时,确实会出现。(特别是阅读链接部分中关于从X到Z的部分,反之亦然。)唯一的“问题”是指数外出现了一个神奇的1/sigma
。这是对整个积分进行缩放,以使概率密度缩放
sigma * np.random.randn(...) + mu
np.random.normal(loc= mu, scale= sigma, ...)