@sega_sai、@askewchan、@Zhenya のおかげで、私は自分でコードを作成しました。実装により、これが最も効率的なものになると信じています。最初の関数は、すべて同じ N=maximum-minimum パラメータと同じ p=0.5 を持つ "binoNumber" 二項分布の混合を作成しますが、生成したランダムな中心に従ってシフトされます。
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')