[英]numpy covariance between each column of a matrix and a vector
基於這篇文章 ,我可以使用np.cov((x,y), rowvar=0)
得到兩個向量之間的協方差。 我有一個矩陣MxN和一個向量Mx1。 我想找到矩陣的每列與給定向量之間的協方差。 我知道我可以使用for
循環來編寫。 我想知道我是否可以某種方式使用np.cov()
來直接獲得結果。
正如Warren Weckesser所說, numpy.cov(X, Y)
不適合這項工作,因為它只是將數組加入一個M乘(N + 1)數組並找到巨大的(N + 1)(N) +1)協方差矩陣。 但是我們總是會有協方差的定義,並且它易於使用:
A = np.sqrt(np.arange(12).reshape(3, 4)) # some 3 by 4 array
b = np.array([[2], [4], [5]]) # some 3 by 1 vector
cov = np.dot(b.T - b.mean(), A - A.mean(axis=0)) / (b.shape[0]-1)
這將返回A的每列與b的協方差。
array([[ 2.21895142, 1.53934466, 1.3379221 , 1.20866607]])
我使用的公式是樣本協方差(這也是numpy.cov計算的),因此除以(b.shape [0] -1)。 如果除以b.shape[0]
,則得到未經調整的種群協方差 。
為了比較,使用np.cov
進行相同的計算:
import numpy as np
A = np.sqrt(np.arange(12).reshape(3, 4))
b = np.array([[2], [4], [5]])
np.cov(A, b, rowvar=False)[-1, :-1]
相同的輸出,但它需要大約兩倍的長度(對於大型矩陣,差異將大得多)。 最后的切片是因為np.cov
計算一個5乘5的矩陣,其中只有最后一行的前4個條目是你想要的。 其余的是A與其自身的協方差,或b與其自身的協方差。
相關系數是通過除以方差的平方根得到的。 注意前面提到的-1調整: numpy.var
默認情況下不numpy.var
,為了實現它你需要ddof=1
參數。
corr = cov / np.sqrt(np.var(b, ddof=1) * np.var(A, axis=0, ddof=1))
檢查輸出是否與效率較低的版本相同
np.corrcoef(A, b, rowvar=False)[-1, :-1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.