Python 理解scipy.stats.norm.rvs()?

Python 理解scipy.stats.norm.rvs()?,python,Python,在scipy.stats.norm.rvs()中,参数刻度表示标准偏差,但在下面的代码段中,sigma_列表表示数组。代码实际上是如何工作的 其中,通过以下代码获得sigma_列表: sigma=0.06 mask=(x > 0.65) & (x < 0.8) sigma_list=sigma+mask*0.03 sigma_list y = sp.stats.norm.rvs(scale=sigma_list, size=200) sigma=0.06 遮罩=(x

scipy.stats.norm.rvs()
中,参数刻度表示标准偏差,但在下面的代码段中,sigma_列表表示数组。代码实际上是如何工作的

其中,通过以下代码获得sigma_列表:

sigma=0.06

mask=(x > 0.65) & (x < 0.8)

sigma_list=sigma+mask*0.03

sigma_list

y = sp.stats.norm.rvs(scale=sigma_list, size=200)
sigma=0.06
遮罩=(x>0.65)和(x<0.8)
西格玛列表=西格玛+掩码*0.03
西格玛表
y=sp.stats.norm.rvs(标度=sigma_列表,尺寸=200)
即使sigma_列表和y的标准偏差也不匹配

我想知道上述scipy模块的工作情况


抱歉,我没有提到x是代码中0到1之间的值数组,这里的
掩码将为True或False。所以,如果你做一些加法或减法,它分别被转换成1或0

然后,
sigma_list
的结果不是一个列表,也不是一个数组,而是一个浮点值。查看,您可以看到它的用法

rvs(loc=0, scale=1, size=1, random_state=None)
如果您查看(第2771行),您有:

loc:类似阵列,可选 位置参数(默认值为0)

大小:int或int的元组,可选 定义随机变量的数量(默认值为1)。请注意,
size
必须作为关键字而不是位置参数提供

随机状态:无或int或
np.random.RandomState
实例,可选 如果为int或RandomState,则使用它绘制随机变量。 如果没有,依赖于
self.random\u状态
。 默认值为“无”


首先,您应该创建一个名为
x
的变量。此变量的大小应为200,因为这是生成的随机变量
y
的大小

import numpy as np
x = np.linspace(0, 1, 200)
然后,
mask
选择大于0.65且小于0.8的
x
的每个样本。变量
mask
将是一个与
x
大小相同的布尔向量,即200个样本。此掩码将具有值为True或False的样本。对于满足条件(
0.65
)的阵列
x
的每个样本,掩码的对应样本的值将为真,否则为假

将布尔值乘以一个数字时,布尔值表现为值为0(False)或1(True)的整数。因此,乘法
mask*0.03
结果为0.03,其中
0.65
,否则为0

所以这段代码的作用很简单:

  • 对于
    0.65
    ,标准偏差为0.06+0.03,即0.09
  • 否则,标准偏差将为0.06

  • x
    缺少一些代码。
    sigma\u list
    y
    的标准偏差不同,因为您的样本很小。例如,设置
    size=20000
    std(y)
    将接近
    sigma\u list
    。这仅适用于x是标量的情况。@MaxPowers
    >>x=0.7>>掩码=(x>0.65)和(x<0.8)>>掩码真值
    是<在您的示例中,code>x
是一个标量。如果
x
是一个数组,上面的表达式将返回一个布尔数组,这将导致
.rvs()
抛出一个
ValueError
。哦,是的。我没有那样理解它。x是一个数组,我忘了提到