本教程将介绍Numpy随机正态函数(AKA, np.random.normal)。
如果你在Python中做任何种类的统计或数据科学,你经常需要与随机数打交道。 尤其是,你经常需要处理正态分布的数字。
Numpy随机正态函数生成了一个从正态分布中抽取的数字样本,也叫高斯分布。
本教程将向你展示该函数是如何工作的,并将向你展示如何使用该函数。
如果你只是需要一些具体的帮助,你可以通过以下链接跳到相应的章节。
目录。
但如果你对Numpy有点不熟悉,我建议你阅读整个教程。
Numpy随机正态的快速概述
让我们先从高层次解释Numpy随机正态的作用。
对Numpy的快速回顾
让我们简单回顾一下Numpy是什么。
Numpy是Python编程语言的一个模块,用于数据科学和科学计算。
具体来说,Numpy对数字数据进行数据处理。 它使你能够将数字数据收集到一个数据结构中,称为Numpy数组。 它还能让你对Numpy数组进行各种计算和操作。
基本上,Numpy是一个在Python中创建和处理数字数组的工具包。
(关于Numpy数组基础知识的更多细节,请查看我们关于NumPy数组的教程)。
Numpy随机正态生成正态分布的数字
所以Numpy是一个在Python中处理数字数据的包。
np.random.normal在哪里?
正如我之前提到的,Numpy 有各种各样的工具用于处理数值数据。 在大多数情况下,Numpy的工具使你能够做两件事中的一件:创建数字数据(结构为Numpy数组),或者对Numpy数组进行一些计算。
Numpy随机正态函数使你能够创建一个包含正态分布数据的Numpy数组。
对正态分布数据的快速回顾
希望你对正态分布数据很熟悉,但作为复习,下面是我们在直方图中绘制数据时的样子。
正态分布数据的形状有点像钟形,所以它通常被称为 "钟形曲线"。
正态分布的2个重要参数
重要的是,有2个主要参数影响分布的形状。
- 平均数
- 标准差
平均值告诉我们分布的峰值在哪里。
标准差衡量数据的 "分散程度"(尽管,还有其他衡量数据分散程度的指标,如方差)。
这些指标都很重要,因为它们直接关系到Numpy随机正态的两个语法参数。
因此,为了将其与np.random.normal联系起来,Numpy随机正态函数允许我们创建正态分布数据,同时指定重要的参数,如平均值和标准差。
考虑到这一点,让我们看一下语法。
Numpy随机正态的语法
Numpy随机正态函数的语法是相当直接的。
请注意,在下面的语法解释中以及本博文的其余部分,我们将假设你已经用以下代码导入了Numpy。import numpy as np
. 该代码将使你能够将Numpy称为np
。
np.random.normal 语法
这里是基本的语法。
让我解释一下。
通常情况下,我们会用np.random.normal()
这个名字来调用这个函数。正如我前面提到的,这假定我们已经用代码import numpy as np
来导入Numpy 。
在这个函数中,你会注意到3个参数。loc
,scale
,size
。
这些参数允许你分别控制正态分布的平均值、标准差和大小/形状。
让我们来讨论一下这些参数中的每一个。
np.random.normal 函数的参数
np.random.normal 函数有三个主要的参数来控制输出。loc
,scale
, 和size
。
我将分别解释这些参数。
loc
loc
参数控制输出数据的平均值。
这个参数的默认值是0
,所以如果你不使用这个参数来指定分布的平均数,平均数将是0。
(我将在例4中向你展示这个例子)。
规模
scale
参数控制正态分布的标准差。
默认情况下,scale
参数被设置为 1。
(我将在例子5中向你展示这个例子。)
大小
size
参数控制输出的大小和形状。
记住,输出将是一个Numpy数组。 Numpy数组可以是一维的,二维的,或多维的(即2个或更多)。
如果你对Numpy数组不是很熟悉,这可能会让你感到困惑。 要了解更多关于Numpy数组结构的知识,我建议你阅读我们的Numpy数组教程。
说了这么多,这里有一个简单的解释。
你提供给size
参数的参数将决定输出数组的大小和形状。
如果你提供一个单一的整数,x
,np.random.normal将在一个一维的Numpy数组中提供x
随机正态值。
你也可以指定一个更复杂的输出。
例如,如果你指定size = (2, 3)
,np.random.normal将产生一个2行3列的Numpy数组。 它将被填充为从随机正态分布中抽取的数字。
请记住,你可以创建超过2个维度的输出数组,但为了简单起见,我将把它留给另一个教程。
(我将在实例3中向你展示一个参数方面的例子)。
例子:如何使用Numpy的随机正态函数
现在我已经向你展示了Numpy随机正态函数的语法,让我们来看看一些例子,看看它是如何工作的。
例子。
- 从正态分布中抽出一个数字
- 从正态分布中抽出5个数字
- 创建一个正态分布值的二维Numpy数组
- 生成具有特定平均值的正态分布值
- 生成具有特定标准差的正态分布值
- 使用loc、scale和size参数的综合例子
在你运行例子之前,先运行这段代码
在你使用下面的任何例子之前,请确保你运行下面的代码。
import numpy as np
我在本教程的开头简要地解释了这段代码,但它对下面的例子很重要,所以我再解释一下。
代码import numpy as np
,将Numpy模块导入到你的工作环境中,使你能从Numpy中调用函数。 如果你不使用import
语句来导入Numpy,Numpy的函数将无法使用。
此外,通过将Numpy导入为np
,我们给Numpy模块起了一个类似于 "昵称 "的名字。 因此,当我们调用Numpy函数时,我们就可以把Numpy称为np。
如果你以前使用过 Python 模块,你可能会理解这一点,但如果你真的是一个初学者,可能会有点困惑。 所以,我想快速解释一下。
关于Numpy随机种子的简短说明
在这些例子中,你会看到我使用np.random.seed来设置Numpy随机数发生器的种子。
如果你在这些例子中使用与我相同的种子,你应该得到完全相同的输出(但如果你使用不同的种子值,你会得到不同的输出)。
我们经常使用np.random.seed来实现可重复性,特别是在教程的背景下。
如果你想阅读更多关于Numpy随机种子的内容,你可以查看我们关于np.random.seed函数的教程。
好了,现在让我们来操作一些例子。
例1:从正态分布中抽出一个数字
首先,让我们看看一个非常简单的例子。
在这里,我们将使用 np.random.normal 来从正态分布中生成一个单一的观察值。
np.random.normal(1)
这段代码将生成一个从正态分布中抽取的单个数字,其平均值为0,标准差为1。
从本质上讲,这段代码的工作原理与np.random.normal(size = 1, loc = 0, scale = 1)
相同。
记住:如果我们没有为loc
和scale
参数指定值,它们将默认为loc = 0
和scale = 1
。
例2:从正态分布中抽出5个数字
现在,让我们从正态分布中抽取5个数字。
这段代码与前面的例子中的代码几乎完全一样。
np.random.normal(5)
在这里,5
的值被传递给size
参数。 它表明我们想产生一个包含5个数值的Numpy数组,从正态分布中抽取。
同时注意,由于我们没有明确指定loc
和scale
的值,它们将默认为loc = 0
和scale = 1
。
例3:创建一个正态分布值的二维Numpy数组
现在,我们将创建一个二维的正态分布值数组。
要做到这一点,我们需要向size
参数提供一个值的元组。
np.random.seed(42)
np.random.normal(size = (2, 3))
这就产生了输出。
array([[ 1.62434536, -0.61175641, -0.52817175],
[-1.07296862, 0.86540763, -2.3015387 ]])
所以我们使用了size
参数和size = (2, 3)
。这产生了一个有6个值的2维Numpy数组。
这个输出数组有2行和3列。 这里,输入元组中的 "2 "指定了行的数量,而 "3 "指定了列的数量。
在这个例子中,我们使用size
参数来创建一个二维数组。但是要注意,你可以使用size
参数来创建更高维度的数组。
例四:生成具有特定平均值的正态分布值
现在,让我们来生成具有特定平均值的正态分布值。要做到这一点,我们将使用loc
参数。
记得在本教程的前面,loc
参数控制了函数从中提取数字的正态分布的平均值。
在这里,我们要将数据的平均数设置为50,语法是loc = 50
。
np.random.seed(42)
np.random.normal(size = 1000, loc = 50)
完整的数值阵列太大,无法在此显示,但这里是输出的前几个数值。
array([ 50.49671415, 49.8617357 , 50.64768854, 51.52302986,
49.76584663, 49.76586304, 51.57921282, 50.76743473,
49.53052561, 50.54256004, 49.53658231, 49.53427025
...
你可以一目了然地看到,这些数值大致集中在50左右。 如果你用Numpy的mean函数来计算平均值,你会发现观测值的平均值是50。
例5:生成具有特定标准差的正态分布值
接下来,我们将生成一个具有特定标准差的数值数组。
正如博文前面提到的,我们可以通过使用scale
参数来修改标准差。
在这个例子中,我们将生成1000个标准偏差为100的数值。
np.random.seed(42)
np.random.normal(size = 1000, scale = 100)
而这里是输出的前几个值。
array([ 4.96714153e+01, -1.38264301e+01, 6.47688538e+01,
1.52302986e+02, -2.34153375e+01, -2.34136957e+01,
1.57921282e+02, 7.67434729e+01, -4.69474386e+01
...
请注意,我们设置了size = 1000
,所以代码将生成1000个值。 为了简洁起见,我只显示了前几个值。
这里有点难看出数据是如何分布的,但是我们可以用std()
方法来计算标准差。
np.random.seed(42)
np.random.normal(size = 1000, scale = 100).std()
这就产生了以下结果。
99.695552529463015
如果我们把它四舍五入,就是100。
注意,在这个例子中,我们没有使用loc
参数。 请记住,默认情况下,loc参数被设置为loc = 0
,所以默认情况下,这个数据是以0为中心的。我们也可以在这里修改loc
参数,但是为了简单起见,我把它保留在默认状态。
例6:使用np.random.normal中loc、scale和size参数的综合例子
让我们再来做一个例子,把所有的部分放在一起。
在这里,我们将创建一个平均值为50、标准差为100的数值数组。
np.random.seed(42)
np.random.normal(size = 1000, loc = 50, scale = 100)
我不会显示这个操作的输出....。我将把它留给你自己来运行。
让我们快速地讨论一下这段代码。 如果你读过本教程中以前的例子,你应该明白这一点。
我们正在用loc
参数定义数据的平均值。 用loc = 50
将数据的平均数设置为50。
我们用scale
参数来定义数据的标准差。 我们已经用代码scale = 100
。
代码size = 1000
表示我们要创建一个有1000个值的Numpy数组。
关于np.random.normal的常见问题
现在你已经了解了np.random.normal并看到了一些例子,让我们回顾一下关于这个函数的一些常见问题。
经常问的问题。
问题1:np.random.normal和np.random.randn之间有什么区别?
你可能见过一个在 Python 中创建正态分布数据的不同函数,叫做 np.random.randn。
np.random.randn 函数与 np.random.normal 有关,但有一些区别。
就像 np.random.normal 一样,np.random.randn 函数产生了从正态分布中抽取的数字。
主要的区别在于,np.random.randn就像是np.random.normal的一个特例。np.random.randn的操作就像np.random.normal的loc = 0
和scale = 1
。
所以这段代码
np.random.seed(1)
np.random.normal(loc = 0, scale = 1, size = (3,3))
与这段代码的操作是一样的。
np.random.seed(1)
np.random.randn(3, 3)
换句话说,np.random.randn是一个特殊的函数,可以从 "标准正态 "分布中生成数据。
如果你有其他问题,请在评论区留下你的问题
有什么是我漏掉的吗?
你是否还对Numpy随机正态的某些具体内容感到困惑?
如果是,请在页面底部的评论区留下你的问题或评论。
如果你想用Python学习数据科学,请学习Numpy
就这样吧。 你可以使用Numpy随机正态函数在Python中创建正态分布数据。
但是如果你真的想在Python中掌握数据科学和分析,你需要更多地了解Numpy。
np.random.normal函数只是Python中更大的数据操作工具包中的一个部分。
说到这里,如果你想了解更多,你可以查看我们的其他Numpy教程,比如。
还有更多...