You need to enable JavaScript to run this app. numpy.cov计算协方差矩阵与手动结果不一致的原因及解决方法
优惠活动
大模型
产品
解决方案
定价
更多

numpy.cov计算协方差矩阵与手动结果不一致的原因及解决方法

为什么numpy计算的Covar(A,A)结果为4

np.cov默认使用样本无偏协方差的计算规则,分母取样本数减1(即n-1)。你手动计算时用的是总体协方差规则,分母取样本数n。
针对你给出的A数组:

  • 离均差平方和为 $(1-1)^2 + (3-1)^2 + (-1-1)^2 = 8$
  • numpy计算时分母为 $3-1=2$,因此得到 $8/2=4$,和输出结果完全一致

numpy计算协方差矩阵的逻辑

  • 默认输入矩阵的每一行对应一个变量,每一列对应一个观测样本,最终输出的协方差矩阵维度和变量数量一致
  • 默认启用无偏估计(默认参数bias=False),协方差计算公式为:
    $Cov(X,Y) = \frac{\sum_{i=1}^{n}(X_i-\bar{X})(Y_i-\bar{Y})}{n-1}$
  • 若设置bias=True,则切换为有偏估计,分母改为样本数n,对应总体协方差的计算逻辑
  • 可选参数rowvar可以调整输入格式规则:设置为False时,代表输入矩阵的每一列对应一个变量,每一行对应一个观测样本

得到预期计算结果的方法

调用np.cov时指定bias=True即可,代码示例如下:

import numpy as np
X = np.array([[1,3,-1],[1,0,-1]])
# 指定使用有偏估计,分母取样本数n
res = np.cov(X, bias=True)
print(res)

输出结果:

array([[2.66666667, 1.        ],
       [1.        , 0.66666667]])

其中第一个元素值为8/3,和你手动计算的结果完全匹配。


内容的提问来源于stack exchange,提问作者MsA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 17:36:03