2016-09-24 152 views
2

我想實現一個從三個不同的多元高斯分佈返回100個採樣的函數。python從不同概率的不同分佈採樣

numpy提供了一種從單一多元高斯樣本中抽樣的方法。但我找不到一種方法從三種不同的採樣概率的多元變量中抽樣。

我的要求是與概率$ [0.7,0.2,0.1]從均值和協方差3個多變量高斯$如下

G_1 mean = [1,1] cov =[ [ 5, 1] [1,5]] 
G_2 mean = [0,0] cov =[ [ 5, 1] [1,5]] 
G_3 mean = [-1,-1] cov =[ [ 5, 1] [1,5]] 

任何想法給定採樣?

回答

3

說你創建你發生器陣列:

generators = [ 
    np.random.multivariate_normal([1, 1], [[5, 1], [1, 5]]),    
    np.random.multivariate_normal([0, 0], [[5, 1], [1, 5]]), 
    np.random.multivariate_normal([-1, -1], [[5, 1], [1, 5]])] 

現在你可以創建一個加權隨機生成指數的,因爲np.random.choice支持加權採樣:

draw = np.random.choice([0, 1, 2], 100, p=[0.7, 0.2, 0.1]) 

draw是一種長度 - 100個條目陣列,每個分別來自{0,1,2},概率分別爲0.7,0.2,0.1,。)

現在只需生成樣本:

[generators[i] for i in draw]