簡體   English   中英

矩陣的每列與向量之間的numpy協方差

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM