使用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
相关产品推荐
相关产品推荐

