【发布时间】:2019-05-03 23:38:58
【问题描述】:
我正在尝试编写一个计算协方差矩阵的函数。我得到的答案与内置的 np.cov() 非常相似,但不完全一样。似乎失去了准确性和精确性。有谁知道为什么我的协方差矩阵不那么精确和准确。
def cov_matrix(X):
# initialize covariance matrix
mat = np.zeros((X[0].size, X[0].size))
# calculate mean of each column (this is a array)
mu = np.mean(X, axis=0)
# normalized data
norm_X = X-mu
# calculate covariance for each pair of columns in X
for (i,j) in np.ndindex(mat.shape):
mat[i, j] = np.dot(norm_X[:,i], norm_X[:,j])/len(X)
return mat
# X is a 50*4 numpy array
# My function for covariance matrix
print(cov_matrix(X))
# Builtin np function for covariance matrix
print(np.cov(X.T))
输出:
Covariance matrix from cov_matrix():
array([[0.121764, 0.098292, 0.015816, 0.010336],
[0.098292, 0.142276, 0.011448, 0.011208],
[0.015816, 0.011448, 0.029504, 0.005584],
[0.010336, 0.011208, 0.005584, 0.011264]])
Covariance matrix from np.cov():
array([[0.12424898, 0.10029796, 0.01613878, 0.01054694],
[0.10029796, 0.14517959, 0.01168163, 0.01143673],
[0.01613878, 0.01168163, 0.03010612, 0.00569796],
[0.01054694, 0.01143673, 0.00569796, 0.01149388]])
【问题讨论】:
-
提示:您是在计算总体协方差还是样本协方差?哪个是numpy计算?
-
@DSM 是的,这就是答案。我不敢相信我错过了这个。 Numpy 正在计算样本协方差,而我正在计算总体协方差。非常感谢。如果您希望我接受这个作为答案,请将其发布为答案。
-
对于无偏估计器,必须除以 (len(X)-1),我猜这就是
np.cov所做的。因为对于 50 个似乎很匹配的术语,差异约为 2%。
标签: python numpy floating-point