Python:手动协方差矩阵
我有两个向量X0和X1(mx0和mx1是每个向量的平均值),我试图找到它们之间的协方差矩阵。我通过以下操作找到了矩阵中的每个元素:Python:手动协方差矩阵,python,covariance,Python,Covariance,我有两个向量X0和X1(mx0和mx1是每个向量的平均值),我试图找到它们之间的协方差矩阵。我通过以下操作找到了矩阵中的每个元素: b1=numpy.zeros(N*1).reshape((N,1)) b2=numpy.zeros(N*1).reshape((N,1)) for i in range(0,N): b1[i]=X0[i]-mX0 for j in range(0,N): b2[j]=X1[j]-mX1 bii=sum(p*q for p,q in zip(b1,
b1=numpy.zeros(N*1).reshape((N,1))
b2=numpy.zeros(N*1).reshape((N,1))
for i in range(0,N):
b1[i]=X0[i]-mX0
for j in range(0,N):
b2[j]=X1[j]-mX1
bii=sum(p*q for p,q in zip(b1,b1))/(N-1)
bij=sum(p*q for p,q in zip(b1,b2))/(N-1)
bji=sum(p*q for p,q in zip(b2,b1))/(N-1)
bjj=sum(p*q for p,q in zip(b2,b2))/(N-1)
但是我想要一种更好的方法通过循环来完成,而不是单独完成每个元素 如果你想手工计算协方差矩阵,研究/模拟,或者如果你只想得到结果,直接使用
np.cov(b1,b2)
import numpy as np
np.random.seed(1)
N = 10
b1 = np.random.rand(N)
b2 = np.random.rand(N)
X = np.column_stack([b1, b2])
X -= X.mean(axis=0)
fact = N - 1
by_hand = np.dot(X.T, X.conj()) / fact
print(by_hand)
# [[ 0.04735338 0.01242557]
# [ 0.01242557 0.07669083]]
using_cov = np.cov(b1, b2)
assert np.allclose(by_hand, using_cov)