python - 为什么 numpy 的协方差与手动计算略有不同?

标签 python numpy

我只是好奇,想问这个问题。为什么当我手动计算一组数据的协方差矩阵时,我的值与 numpy 的值略有不同?

我有两组数据XY

data = io.loadmat("datafile.mat")['data']
X = data[:,0]
Y = data[:,1]

协方差矩阵可以这样计算(通过查看 X 和 X、X 和 Y、Y 和 X 等之间的相关性)

n = len(X)
corXX = np.var(X)
corXY = (1/n)*np.dot(X - np.mean(X), Y - np.mean(Y))
corYY = np.var(Y)
covariance = np.array([[corXX, corXY], [corXY, corYY] ])

对于我的数据集,这给了我:

array([[ 1.722105  ,  5.34104265],
   [ 5.34104265, 17.72717759]])

而使用 numpy 的协方差函数 covariance = np.cov(X,Y) 给了我

array([[  1.7395    ,   5.39499258],
   [  5.39499258,  17.90623999]]) 

相似,但又不完全相同......

最佳答案

默认情况下,np.cov 计算无偏协方差,它使用因子 (N-1) 而不是您计算的 N

如果您查看 np.cov 的文档您会看到有一个参数 (bias) 可以从协方差的有偏或无偏版本中进行选择。默认情况下,它设置为 false

您可以在 here 中阅读更多有关使用不同前置因子背后的问题的信息如果你好奇的话。

关于python - 为什么 numpy 的协方差与手动计算略有不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48881499/

相关文章:

python - 在 Python 中将类名分配给类变量

python - 编程嵌套 numba.cuda 函数调用

python - 如何解释 numpy.correlate 和 numpy.corrcoef 返回的值?

python - 合并两个记录数组

python - 使用 imwrite opencv python 函数写入同一图像后更改像素值

python - 绘制两个不同长度的不同数组

python - 应用引擎 : string to datetime?

python - 使用 pandas.HDFStore 读取 HDF5 文件中的整个组

Python 根据最常出现的项目更新字典

python - 为什么 "median"使用统计包比 "mean"快 2 倍?