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是一个数组,我忘了提到