我是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
非常感谢您提供有关如何解决计算问题的帮助/说明!谢谢
答案 0 :(得分:1)
要计算平均值,请使用means = df.mean()
(带开括号和闭括号),否则您将获得计算平均值的方法,这会引起误差。
此外,您正在覆盖求和运算sum = 0
,我将使用total_sum = 0
。