2013-03-02 113 views
1

numpy.random.multivariate_normal(平均,COV [,大小])numpy.random.multivariate_normal(平均,COV [,大小])

我的N個點和X維度的數據集。所以當我計算numpy.mean(data,axis = 0)和numpy.cov(data)並使用numpy.random.multivariate_normal(mean,cov)中的平均值和cov值時。它拋出以下錯誤

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "mtrand.pyx", line 3986, in mtrand.RandomState.multivariate_normal (numpy/random/mtrand/mtrand.c:16833) 
ValueError: mean and cov must have same length 

它的因爲numpy.mean()計算明智的列明智和給出一個X維數組。 雖然numpy.cov()的輸出是一個N行和X列的協方差矩陣。 任何人都可以提出修復建議。

回答

2

這與numpy.cov如何解釋其第一個參數有關。你必須在一行中的每個觀察,而numpy.cov expects each observation in a column.

要解決,需要數據的轉置的np.cov(data.T)得到X X X協方差矩陣:

In [58]: N, X = 100, 3 

In [59]: data = np.random.random((N,X)) 

In [60]: mean = np.mean(data, axis = 0) 

In [61]: mean 
Out[61]: array([ 0.4913433 , 0.49484566, 0.52463666]) 

In [62]: np.cov(data.T).shape 
Out[62]: (3, 3) 

In [63]: cov = np.cov(data.T) 

In [64]: np.random.multivariate_normal(mean, cov) 
Out[64]: array([ 0.27194062, 0.65995531, 0.67367201]) 

另外,使用rowval=False參數:

In [68]: cov = np.cov(data, rowvar=False) 

In [69]: cov.shape 
Out[69]: (3, 3) 
+0

感謝Unutbu,我錯過了那部分。現在修好! – Riyaz 2013-03-03 10:01:08