python 计算协方差矩阵_计算协方差矩阵——numpy.cov和numpy.dot之间的差异?

本文探讨了在Python中使用numpy库计算协方差矩阵时,`numpy.cov()`和`numpy.dot()`产生的不同结果。作者提供了一个三维数组的示例,将其展平为二维数组后进行协方差计算。`numpy.cov()`返回一个9x9的矩阵,而`numpy.dot()`得到5x5的矩阵。进一步计算特征值和特征向量显示两者不同,引发疑问哪个是正确方法。文章寻求解答这两种方法的正确性和适用场景。
摘要由CSDN通过智能技术生成

我正在使用三维numpy阵列,最终我将在这些阵列上执行PCA。我首先将三维阵列展平为二维,以便计算协方差(然后是特征值和特征向量)。

在计算协方差矩阵时,我使用numpy.cov和numpy.dot得到了不同的结果。如果我的二维数组是(5,9),我想得到一个5x5(即NxN)协方差矩阵。这就是我用numpy.dot得到的。对于numpy.cov,我得到的协方差矩阵是9x9。这不符合我需要的形状,但老实说,我不知道哪一个是正确的。在我所研究的例子中,我看到了两种计算协方差的方法。

如果我通过numpy.linalg.eig计算携带numpy.dot与numpy.cov,我显然会得到不同的答案(都在下面的示例输出中打印)。所以,在这一点上,我很困惑哪种方法是正确的,或者我可能会错在哪里。

这是输出的测试代码。谢谢你的帮助。import numpy as np

a = np.random.random(((5,3,3))); # example of what real input will look like

# create 2D flattened version of 3D input array

d1,d2,d3 = a.shape

b = np.zeros([d1,d2*d3])

for i in range(len(a)):

b[i] = a[i].flatten()

print "shape of 3D array: ", a.shape

print "shape of flattened 2D array: ", b.shape, "\n"

print "flattened 2D array:\n", b, "\n"

# mean-center the flattened array

b -= np.mean(b, axis=0)

# calculate the covariance matrix of the flattened array

covar1 = np.cov(b, rowvar=0) # this makes a 9x9 array

covar2 = np.dot(b, b.T) # this makes a 5x5 array

print "covariance via numpy.cov:\n", covar1, "\n"

print "covariance via numpy.dot:\n", covar2, "\n"

# calcul

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值