4

2つのベクトルがあり、サンプルの共分散のみを返す関数でそれらを使用しようとしています。誰かが私のプログラムを修正するのを手伝ってもらえますか?私は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) 
4

3 に答える 3

1

これは、外部ライブラリを使用しない私のバージョンです。共分散の方程式はウィキペディアからのものです: 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)
于 2012-10-17T23:10:07.507 に答える
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))
于 2012-10-17T23:26:22.593 に答える
0

numpy共分散などの操作に広く使用されているパッケージを 見てみるとよいでしょう: http://docs.scipy.org/doc/numpy/reference/generated/numpy.cov.html

于 2012-10-17T23:02:16.040 に答える