在scipy.stats.norm.rvs()
中,参数比例表示标准差,但在下面的代码中,sigma_list表示数组。代码实际上如何工作?
通过以下代码获得sigma_list:
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_list和y的标准偏差也不匹配
我想知道上面的scipy模块的工作原理
抱歉,我没有提到x是0到1之间的值数组答案 0 :(得分:2)
在您的代码中,此处mask
将为True或False。因此,如果您进行一些加法或减法,它将分别转换为1或0。
然后sigma_list
的结果不是列表,也不是数组而是浮点值。查看documentation,您可以看到它的用法。
rvs(loc=0, scale=1, size=1, random_state=None)
如果你看code(第2771行),你有:
loc:array_like,可选 位置参数(默认= 0)。
size:int或int的元组,可选 定义随机变量的数量(默认值为1)。请注意
size
必须以关键字形式给出,而不是作为位置参数。random_state:无或int或
np.random.RandomState
实例,可选 如果是int或RandomState,则使用它来绘制随机变量。 如果为None,请依赖self.random_state
。 默认值为“无”。
答案 1 :(得分:0)
首先,您应该创建一个名为x
的变量。该变量的大小应为200,因为这是生成的随机变量y
的大小。
import numpy as np
x = np.linspace(0, 1, 200)
然后mask
选择x
的每个大于0.65且小于0.8的样本。变量mask
将是一个布尔向量,其大小与x
相同,即200个样本。此蒙版将具有值为True或False的样本。对于满足条件(x
)的数组0.65 < x < 0.8
的每个样本,掩码的相应样本的值为True,否则为False。
当您将布尔值乘以数字时,布尔值表现为值为0(假)或1(真)的整数。因此,乘法mask * 0.03
的结果为0.03,其中0.65 < x < 0.8
,否则为0。
所以这段代码简单地做到了:
0.65 < x < 0.8
,标准偏差为0.06 + 0.03,即0.09;