2015-04-04 86 views
1

如果我有一個numpy數組X與X.shape=(m,n)和第二個列向量y與y.shape=(m,1),我怎樣才能計算X的每列的協方差與沒有使用for循環y?我期望的結果是形狀(m,1)(1,m)協方差與列

+0

你有沒有看np.cov()函數?似乎與矢量相關的矩陣。看看http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html – xxyzzy 2015-04-04 14:36:04

+0

是的,但我正在處理文本數據,而np.cov會計算X矩陣中各列之間的協方差,有100000列。這會很慢。 – Elian 2015-04-04 14:41:53

+1

不應該輸出大小爲'1xn'或'nx1'? – Divakar 2015-04-04 14:57:05

回答

1

假設輸出,就是要形狀(1,n)的即標量各爲covariance操作用於與B並且因此A每一列與n這樣標量結束了n列,則可以使用此處兩種方法使用covariance formula

方法1:用廣播

np.sum((A - A.mean(0))*(B - B.mean(0)),0)/B.size 

方法2:用矩陣乘法

np.dot((B - B.mean(0)).T,(A - A.mean(0)))/B.size