在scipy.stats.norm.rvs()
中,参数scale表示标准差,但在下面的代码中,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之间的数组
发布于 2017-06-09 16:17:30
在您的代码中,mask
将在此处为True或False。所以如果你做一些加法或减法,它会分别转化为1或0。
那么sigma_list
的结果既不是列表也不是数组,而是一个浮点值。查看documentation,您可以看到它的使用情况。
rvs(loc=0, scale=1, size=1, random_state=None)
如果您查看code (第2771行),您将看到:
loc : array_like,可选位置参数(default=0)。
大小:整数或整数的元组,可选定义随机变量的数量(默认值为1)。请注意,size
必须作为关键字给出,而不是作为位置参数。
random_state : None或int或np.random.RandomState
实例,可选如果为int或RandomState,则使用它来绘制随机变量。如果没有,则依赖于self.random_state
。默认值为None。
发布于 2020-06-05 22:54:38
首先,您应该创建了一个名为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.8
)的数组x
的每个样本,掩码的相应样本的值将为True,否则为False。
将布尔值与数字相乘时,布尔值的行为类似于值为0 (False)或1 (True)的整数。因此乘法mask * 0.03
的结果是0.03where 0.65 < x < 0.8
,否则为0。
所以这段代码可以简单地做到这一点:
0.09;
0.65 < x < 0.8
标准偏差为0.06 + 0.03,即,标准偏差为0.06https://stackoverflow.com/questions/44452600
复制相似问题