Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 两步概率绘制-结合概率加权函数和从实际正态分布绘制_Python_Random_Probability_Normal Distribution_Random Seed - Fatal编程技术网

Python 两步概率绘制-结合概率加权函数和从实际正态分布绘制

Python 两步概率绘制-结合概率加权函数和从实际正态分布绘制,python,random,probability,normal-distribution,random-seed,Python,Random,Probability,Normal Distribution,Random Seed,我想根据一个特定的概率函数,用python绘制一个随机值(r): 该值应为固定常数,概率为(p),概率为(1-p),该值从区间(a,b)的正态分布中随机抽取 在我看来,该函数由两部分组成: 第一张图:概率为p和(1-p)的概率加权函数 第二次抽取:区间(a,b)中截断正态分布的抽取 f、 e.常数=10;p=0,3;1-p=0,7,a=5,b=15 我的想法是: r=random.choices([constant,random.normal()],weights=(0.3,0.7)) 但是,它

我想根据一个特定的概率函数,用python绘制一个随机值(r):

该值应为固定常数,概率为(p),概率为(1-p),该值从区间(a,b)的正态分布中随机抽取

在我看来,该函数由两部分组成:

第一张图:概率为p和(1-p)的概率加权函数

第二次抽取:区间(a,b)中截断正态分布的抽取

f、 e.
常数=10;p=0,3;1-p=0,7,a=5,b=15

我的想法是:

r=random.choices([constant,random.normal()],weights=(0.3,0.7))


但是,它似乎不起作用,而且我不知道如何包含区间(a,b)。

你的想法是正确的,但你没有正确处理正态分布。首先,如果您使用的是
import random
,您的选择是
random.gauss(mu,sigma)
random.normalvariate(mu,sigma)
。没有
normal()
函数。第二,正态分布的范围是无限的。您可以指定分布中心
mu
,以及
sigma
,这是一种分布度量,使得约95%的结果将落在
mu±2*sigma
范围内。如果确实需要限制范围,则需要使用循环编写自己的函数,以拒绝超出范围限制的值,然后重试

下面是一个工作示例,展示了您的想法:

随机导入
常数=-42
μ=10
西格玛=2
对于范围(10)内的uu:
r=随机选择((常数,随机,高斯(μ,σ)),权重=(0.3,0.7))
印刷品(r)
对于那些
mu
sigma
的值,超出范围[5,15]的结果将很少见,但肯定仍然会发生

这将产生如下结果:

[7.674159248587632]
[-42]
[7.818652194185853]
[-42]
[7.418414458386396]
[11.855000252151326]
[12.398753049340957]
[9.663097201849096]
[-42]
[10.385663464672415]
如果您不喜欢括号,
print(r[0])