感谢@sega_sai、@askewchan 和@Zhenya,
我自己编写了代码,我相信由于实现,这将是最
高效的。有两个函数,第一个函数使“binoNumber”二项式分布的混合都具有相同的 N=maximum-minimum 参数和相同的 p=0.5,但根据我为它们生成的随机中心移动。
global binoInitiated
binoInitiated=False;
def binoMixture(minimum,maximum,sampleSize):
global centers
binoNumber=10;
if (not binoInitiated):
centers=np.random.randint(minimum,maximum+1,binoNumber)
sigma=maximum-minimum-2
sam=np.array([]);
while sam.size<sampleSize:
i=np.random.choice(binoNumber);
temp=np.random.binomial(sigma, 0.5,1)+centers[i]-sigma/2+1
sam=np.append(sam,temp)
return sam
此功能是为预先制作的分布绘制一个近似的PDF。
感谢@EnricoGiampieri,我使用他的代码制作了这一部分。
def binoMixtureDrawer(minimum,maximum):
global binoInitiated
global centers
sam=binoMixture(minimum,maximum,50000)
# this create the kernel, given an array it will estimate the probability over that values
kde = gaussian_kde( sam )
# these are the values over wich your kernel will be evaluated
dist_space = linspace( min(sam), max(sam), 500 )
# plot the results
fig.plot( dist_space, kde(dist_space),'g')