Python 从(叠加的)分布创建间距不等的值

Python 从(叠加的)分布创建间距不等的值,python,scipy,statistics,scipy.stats,Python,Scipy,Statistics,Scipy.stats,我想创建一个具有不等间距值的数组。间距应通过(例如)具有不同平均值和宽度值的两个正态分布的叠加来确定。对于单一(正态)分布,我在这篇文章的帮助下设法得到了我想要的: 使用此代码: 将numpy导入为np 将matplotlib.pyplot作为plt导入 从scipy导入统计信息 距离=统计标准(loc=1.2,刻度=0.6) bounds=dist.cdf([0,2]) pp=np.linspace(*边界,num=21) VAL=dist.ppf(pp) plt.绘图(VAL,[1]*VAL

我想创建一个具有不等间距值的数组。间距应通过(例如)具有不同平均值和宽度值的两个正态分布的叠加来确定。对于单一(正态)分布,我在这篇文章的帮助下设法得到了我想要的:

使用此代码:

将numpy导入为np
将matplotlib.pyplot作为plt导入
从scipy导入统计信息
距离=统计标准(loc=1.2,刻度=0.6)
bounds=dist.cdf([0,2])
pp=np.linspace(*边界,num=21)
VAL=dist.ppf(pp)
plt.绘图(VAL,[1]*VAL.size,'o')
plt.show()
对于单个分发,我得到了想要的结果:

但是,对于两个正态分布的叠加,我需要完全相同的结果,如:

dist1=stats.norm(loc=3,scale=2)
dist2=统计标准(loc=1.2,刻度=0.6)
叠加分布的历史程序图如下所示:

作为临时解决方案,我分别为每个发行版创建了阵列,并将它们添加到一起。但是,这并不完全是我想要的,因为添加两个单独的数组会导致添加的数组之间的步长波动(例如,两个不同(单独)数组中的两个值可能几乎或完全相同)

我还试图定义一个从
scipy.stats
继承自
rv_continuous
类的新分布,但未能实现两个不同的平均值/宽度参数

我非常确信,添加单个概率密度函数应该是可行的,但不幸的是,我用这种方法也失败了


提前感谢您的帮助和/或评论

您可以将
rv_continuous
子类化,并提供一个pdf,该pdf是两个给定pdf的平均值

导入matplotlib.pyplot作为plt
将numpy作为np导入
从scipy导入统计信息
类和高斯根(stats.rv连续):
def_pdf(self,x):
返回(stats.norm.pdf(x,loc=3,scale=2)+stats.norm.pdf(x,loc=1.2,scale=0.6))/2
dist=和高斯根()
bounds=dist.cdf([0,7])
pp=np.linspace(*边界,num=21)
VAL=dist.ppf(pp)
plt.绘图(VAL,[0.5]*VAL.size,'o')
xs=np.linspace(0,7500)
plt.plot(xs,dist.pdf(xs))
plt.ylim(ymin=0)
plt.show()

当你说“将它们添加在一起”时,你是指添加numpy数组还是像这样覆盖它们vals=np.array(list(dist1.ppf(pp))+list(dist2.ppf(pp))?这似乎是你正在寻找(处理相同的条目可以添加,如果需要)?谢谢你的回答顺便说一句。帮了我很多!对于类似的应用程序,我需要从这样的分布中抽取随机数。不幸的是,使用dist.rvs(size=n)进行此操作非常缓慢。我为此提出了一个新问题,我想你也可以在这里提供帮助?再次感谢!