2017-06-06 37 views
4

我使用numpy的具有零均值和單位方差繪製一組3D高斯樣本:繪製3D零均值,在python單位方差高斯產生意外的結果

cov = np.zeros((3,3), dtype=np.float32) 
np.fill_diagonal(cov, 1.0) 
data_values = np.random.multivariate_normal([0.,0.,0.], cov, size=5000) # 5000 x 3 

我可以繪製每個維度和看高斯。

我不能繪製完整的3D高斯,因此,以驗證我計算每個樣品的距離在data_values從原點(0,0,0)

dist_from_center = np.sqrt(np.sum((data_values)**2, axis=1))  # array of 5000 

當我繪製我希望在零至看到一個半高斯,隨着模式的距離的直方圖,但我不知道。

任何人都可以看到的錯誤,或解釋的結果呢?

回答

6

從中心的距離分佈是而不是半高斯。例如,在二維中,分配是Rayleigh distributionRice distribution的特例)。

下面是您應該期望分配的快速解釋,使用協方差矩陣爲標識的簡單情況。然後高斯在3D的PDF看起來像K*exp(-x.dot(x)/2)(其中K1/(2*pi)**(1.5)重寫x.dot(x)r**2; r是從原點的距離,使PDF格式的行爲就像K*exp(-r**2/2)

現在想象原點周圍的薄球殼。 ,半徑爲r,極小厚度爲dr,這個薄殼的「體積」約爲4*pi*r**2*dr,整個體積是原點距離分佈必須包含的因此我們乘以高斯PDF(表示爲函數的r)乘以該球殼的體積,除以dr以獲得密度作爲功能r。這給出(2*r**2)/sqrt(2*pi)*exp(-r**2/2)。 (該分佈被稱爲Maxwell-Boltzmann distribution。)

這裏的距離的直方圖的圖,以及r該函數:

plot

使用生成的直方圖

hist(dist_from_center, bins=25, normed=True)