You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy.cov()计算协方差矩阵结果不符的问题求助

使用numpy.cov()计算协方差矩阵结果不符的问题求助

我现在尝试用Python和NumPy来计算一个协方差矩阵,但结果一直和预期不符,想请教大家问题出在哪里。

我的输入矩阵是:

[[0.69, 0.49],
 [-1.31, -1.21],
 [0.39, 0.99],
 [0.09, 0.29],
 [1.29, 1.09],
 [0.49, 0.79],
 [0.19, -0.31],
 [-0.81, -0.81],
 [-0.31, -0.31],
 [-0.71, -1.01]]

我期望得到的协方差矩阵是:

[[0.7322, 0.6189],
 [0.6189, 0.5956]]

我拿到的计算公式是:协方差矩阵 = (1 / (n - 1))ZᵀZ,其中n是样本数量(这里n=10),Z就是上面的输入矩阵。

我首先尝试了直接调用np.cov(np_matrix),但返回的结果尺寸和数值都不对。

后来我查了文档,加上了rowvar=False参数:

np.cov(np_matrix, rowvar=False)

得到的结果是:

array([[0.61655556, 0.61544444],
       [0.61544444, 0.71655556]]

这依然和预期结果不匹配。

之后我想手动按照公式计算,不用cov函数,但发现转置相乘的结果都不对。按照公式,先计算ZᵀZ的话,正确的中间结果应该是:

[[6.59, 5.57],
 [5.57, 5.36]]

但我用矩阵乘法np_matrix.T @ np_matrix得到的却是:

array([[5.549, 5.539],
       [5.539, 6.449]])

如果用元素-wise乘法np_matrix.T * np_matrix还直接报错:

ValueError: operands could not be broadcast together with shapes (2,10) (10,2)

我也试过把数组转换成float或者double类型,结果还是一样不对。

现在完全搞不清楚哪里出错了,不管是用内置函数还是手动计算,都得不到预期的结果,希望大家能帮我分析一下问题所在,谢谢!

备注:内容来源于stack exchange,提问作者marbledcrystals

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:59:35