numpy中的cov(方差計算)簡單介紹

協方差矩陣的計算公式可以參考這一篇博文

協方差矩陣

官方文檔介紹

簡單使用介紹

有下面一個例子,計算數組[1,2,3]和[1,1,1]的協方差矩陣

import numpy as np

X = np.array([1,2,3])
Y = np.array([1,1,1])
A = np.stack((X, Y), axis=0)
print("source:\n", A)
print("cov:\n", np.cov(A))

結果如下:
結果

也可以根據公式自己實現這一函數
協方差公式

import numpy as np

X = np.array([1,2,3])
Y = np.array([1,1,1])
A = np.stack((X, Y), axis=0)

dim1 = np.mean(X)
dim2 = np.mean(Y)
cov11 = sum((X-dim1)*(X-dim1))/(A.shape[1]-1)
cov12 = sum((X-dim1)*(Y-dim2))/(A.shape[1]-1)
cov21 = sum((Y-dim2)*(X-dim1))/(A.shape[1]-1)
cov22 = sum((Y-dim2)*(Y-dim2))/(A.shape[1]-1)
cov = np.array([cov11, cov12, cov21, cov22]).reshape(2,2)
print(cov)

計算結果也是一致的
結果

我們再來一個3維數組的例子

import numpy as np

X = np.array([1,2,3,4])
Y = np.array([3,2,7,9])
Z = np.array([-1,0,-1,1])
A = np.stack((X, Y, Z), axis=0)
print("source:\n", A)
print("cov:\n", np.cov(A))
print("===============")

dim1 = np.mean(X)
dim2 = np.mean(Y)
dim3 = np.mean(Z)
cov11 = sum((X-dim1)*(X-dim1))/(A.shape[1]-1)
cov12 = sum((X-dim1)*(Y-dim2))/(A.shape[1]-1)
cov13 = sum((X-dim1)*(Z-dim3))/(A.shape[1]-1)
cov21 = sum((Y-dim2)*(X-dim1))/(A.shape[1]-1)
cov22 = sum((Y-dim2)*(Y-dim2))/(A.shape[1]-1)
cov23 = sum((Y-dim2)*(Z-dim3))/(A.shape[1]-1)
cov31 = sum((Z-dim3)*(X-dim1))/(A.shape[1]-1)
cov32 = sum((Z-dim3)*(Y-dim2))/(A.shape[1]-1)
cov33 = sum((Z-dim3)*(Z-dim3))/(A.shape[1]-1)
cov = np.array([cov11, cov12, cov13, cov21, cov22, cov23, cov31, cov32, cov33]).reshape(3, 3)
print(cov)

結果如下
計算結果
可以看出也是一致的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章