我想重写这个协方差函数:
def cov1(a, b):
a_mean = np.mean(a)
b_mean = np.mean(b)
sum = 0
for i in range(0, a.size):
sum = ((a[i] - a_mean) * (b[i] - b_mean)) + sum
return sum/(len(a)-1)
我尝试重新编写求和部分,使其成为np.sum:
def cov(a, b):
a_mean = np.mean(a)
b_mean = np.mean(b)
for i in range(0, a.size):
summation = np.sum((a[i] - a_mean) * (b[i] - b_mean))
return summation/(len(a)-1)
但当我使用两个数组时:
a = np.arange(1,11,1)
b = np.arange(10,21,1)
我尝试了两个不同的函数,得到了不同的答案。功能cov1是正确的:
print(cov1(a,b))
print(cov(a,b))
9.166666666666666
2.0
为什么会这样?如何修复函数cov(a,b)使其与cov1(a,b)相同
首先,我认为两个函数都应该确保输入的长度相同
第二,你的功能可能是
第三,numpy有cov功能,试试看
这将返回变量的协方差矩阵。在您的例子中,您可以只使用np.cov(a,b)[0,0]
您忘记在
cov
中定义summation
,并且忘记将summation
添加到新的总和中。 请尝试以下方法:相关问题 更多 >
编程相关推荐