70

PythonNumpy関数covを使用して共分散を計算する方法を理解しようとしています。2つの1次元配列を渡すと、結果の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)

それは機能しますが、使用方法を理解できれば、Numpyバージョンの方がはるかに効率的だと思います。

Numpy cov関数を私が書いたもののように実行させる方法を知っている人はいますか?

ありがとう、

デイブ

4

3 に答える 3

133

abが 1 次元シーケンスの場合、は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)

(ここで、covは上で定義した関数です。)

于 2013-03-10T01:40:55.607 に答える
33

説明してくれたunutbuに感謝します。デフォルトでは、numpy.cov は標本共分散を計算します。母共分散を取得するには、次のように合計 N サンプルで正規化を指定できます。

numpy.cov(a, b, bias=True)[0][1]

またはこのように:

numpy.cov(a, b, ddof=0)[0][1]
于 2016-08-23T10:12:25.097 に答える