定义函数以返回样本协方差

时间:2012-10-17 22:53:26

标签: python

我有两个向量,我试图在函数中使用它们只返回样本协方差。 任何人都可以帮我修复我的程序吗?我是python和编程的新手。

xv= array([8., 9.5, 7.8, 4.2, -7.7, -5.4, 3.2])
yv= array([8.9, 2.0, 4.8, -4.2, 2.7, -3.4, -5.9])

def cov(x,y):
    if (len(x) != len(y)
        [Stop] 
        x.bar = mean(x) 
        y.bar = mean(y) 
        N = len(x)      
    Cov = (sum((x-x.bar)*(y-y.bar))) / (N-1.0) 
    return(Cov) 

3 个答案:

答案 0 :(得分:0)

您可以尝试查看广泛使用的numpy包以进行协方差等操作: http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html

答案 1 :(得分:0)

这是我的版本,没有使用外部库。协方差的等式来自维基百科:http://en.wikipedia.org/wiki/Covariance

x = [8., 9.5, 7.8, 4.2, -7.7, -5.4, 3.2]
y = [8.9, 2.0, 4.8, -4.2, 2.7, -3.4, -5.9]

def mean(x):
    return sum(x) / len(x)

def cov(x, y):
    x_mean = mean(x)
    y_mean = mean(y)
    data = [(x[i] - x_mean) * (y[i] - y_mean)
            for i in range(len(x))]
    return sum(data) / (len(data) - 1)

print cov(x, y)

答案 2 :(得分:0)

我用这种方式改写了你的功能:

def cov(x,y):
    if (len(x) != len(y)):
        sys.exit()
    x_bar = float(sum(x)/len(x))
    y_bar = float(sum(y)/len(y))
    N = len(x)
    sum_xy = 0
    for i in range(len(x)):
        sum_xy += (x[i]-x_bar)*(y[i]-y_bar)
    return(sum_xy/(N-1.0))