手动计算协方差矩阵(无Numpy np.cov)

时间:2020-09-14 10:25:43

标签: python numpy

我是Python的新手,正在尝试手动计算3x3矩阵的协方差矩阵。下面是我的代码:

df = np.array([[1,2,3],[4,5,6],[7,8,9]]) # example 3x3 matrix
means = df.mean
cov = []
for j in range(len(means)):
    sum = 0
    covs = []
    for k in range(len(means)):
        terms = ( (df[i][j] - means[j]) * (df[i][k] - means[k]) for i in range(len(means)) )
        covariance  = sum(terms) / len(means)
        covs.append(covariance)

我遇到以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-83-3e38715077d0> in <module>
      1 means = df.mean
      2 Cov = []
----> 3 for j in range(len(means)):
      4     sum = 0
      5     covs = []

TypeError: object of type 'method' has no len()

编辑:我只是根据建议将其更新为df.mean(),但现在收到以下错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-103-9d6e2f3103c9> in <module>
      6     for k in range(len(means)):
      7         terms = ( (df[i][j] - means[j]) * (df[i][k] - means[k]) for i in range(len(means)) )
----> 8         covariance  = sum(terms) / len(means)
      9         covs.append(covariance)

TypeError: 'int' object is not callable

非常感谢您提供有关如何解决计算问题的帮助/说明!谢谢

1 个答案:

答案 0 :(得分:1)

要计算平均值,请使用means = df.mean()(带开括号和闭括号),否则您将获得计算平均值的方法,这会引起误差。

此外,您正在覆盖求和运算sum = 0,我将使用total_sum = 0