Dav*_*ave 50 python numpy covariance
我试图弄清楚如何计算与Python Numpy函数cov的协方差.当我传递两个一维数组时,我得到了一个2x2的结果矩阵.我不知道该怎么做.我在统计数据上并不擅长,但我认为在这种情况下的协方差应该只是一个数字. 这就是我要找的.我写了自己的:
def cov(a, b):
if len(a) != len(b):
return
a_mean = np.mean(a)
b_mean = np.mean(b)
sum = 0
for i in range(0, len(a)):
sum += ((a[i] - a_mean) * (b[i] - b_mean))
return sum/(len(a)-1)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我认为Numpy版本效率更高,如果我能弄清楚如何使用它.
有谁知道如何使Numpy cov功能表现得像我写的那样?
谢谢,
戴夫
unu*_*tbu 100
当a
和b
是一维序列时,numpy.cov(a,b)[0][1]
相当于你的cov(a,b)
.
返回的2x2数组np.cov(a,b)
具有等于的元素
cov(a,a) cov(a,b)
cov(a,b) cov(b,b)
Run Code Online (Sandbox Code Playgroud)
(再次,cov
你在上面定义的功能.)
小智 20
感谢unutbu的解释.默认情况下,numpy.cov会计算样本协方差.要获得总体协方差,您可以通过总N个样本指定归一化,如下所示:
Covariance = numpy.cov(a, b, bias=True)[0][1]
print(Covariance)
Run Code Online (Sandbox Code Playgroud)
或者像这样:
Covariance = numpy.cov(a, b, ddof=0)[0][1]
print(Covariance)
Run Code Online (Sandbox Code Playgroud)
请注意,从 开始Python 3.10
,可以直接从标准库获取协方差。
使用statistics.covariance
which 来衡量两个输入的联合变异性(您正在寻找的数字):
from statistics import covariance
# x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# y = [1, 2, 3, 1, 2, 3, 1, 2, 3]
covariance(x, y)
# 0.75
Run Code Online (Sandbox Code Playgroud)