22

長さ 25 の 2 つのベクトルがあり、それらの共分散行列を計算したいとします。numpy.cov でこれを実行しようとしましたが、常に 2x2 行列になってしまいます。

>>> import numpy as np
>>> x=np.random.normal(size=25)
>>> y=np.random.normal(size=25)
>>> np.cov(x,y)
array([[ 0.77568388,  0.15568432],
       [ 0.15568432,  0.73839014]])

rowvar フラグを使用しても役に立ちません。まったく同じ結果が得られます。

>>> np.cov(x,y,rowvar=0)
array([[ 0.77568388,  0.15568432],
       [ 0.15568432,  0.73839014]])

25x25 の共分散行列を取得するにはどうすればよいですか?

4

10 に答える 10

13

これを試して:

import numpy as np
x=np.random.normal(size=25)
y=np.random.normal(size=25)
z = np.vstack((x, y))
c = np.cov(z.T)
于 2013-02-25T13:55:43.587 に答える
13

25ではなく2つのベクトルがあります。私が使用しているコンピューターにはpythonがないため、これをテストできませんが、試してください:

z = zip(x,y)
np.cov(z)

もちろん....実際にあなたが望むのは、おそらくもっと似ています:

n=100 # number of points in each vector
num_vects=25
vals=[]
for _ in range(num_vects):
    vals.append(np.random.normal(size=n))
np.cov(vals)

num_vectsこれは、 1xnベクトルの共分散(私が思う/望んでいる)を取ります

于 2013-02-23T02:15:52.777 に答える
3

ドキュメントを次のように読むと、

>> np.cov.__doc__ 

またはNumpy Covarianceを見ると、Numpy は配列の各行を個別の変数として扱うため、2 つの変数があり、2 x 2 の共分散行列が得られます。

前の投稿に正しい解決策があると思います。説明があります:-)

于 2013-02-23T02:16:31.293 に答える
2

あなたが探しているのは、実際にはタイムラグ関数である共分散関数だと思います。私はそのような自己共分散を行っています:

 def autocovariance(Xi, N, k):
    Xs=np.average(Xi)
    aCov = 0.0
    for i in np.arange(0, N-k):
        aCov = (Xi[(i+k)]-Xs)*(Xi[i]-Xs)+aCov
    return  (1./(N))*aCov

autocov[i]=(autocovariance(My_wector, N, h))
于 2015-08-05T18:34:08.650 に答える
1

得られたもの (2 x 2) は、25*25 よりも便利です。X と Y の共分散は、対称 cov_matrix の非対角エントリです。

私が役に立たないと思う (25 x 25) に固執するなら、なぜ定義を書き出さないのですか?

x=np.random.normal(size=25).reshape(25,1) # to make it 2d array.
y=np.random.normal(size=25).reshape(25,1)

cov =  np.matmul(x-np.mean(x), (y-np.mean(y)).T) / len(x)
于 2019-02-01T19:08:47.113 に答える
0

上で指摘したように、ベクトルは 2 つしかないため、2x2 cov 行列のみが得られます。

IIRC の 2 つの主要な対角項は sum( (x-mean(x))**2) / (n-1) となり、y についても同様です。

2 つの非対角項は sum( (x-mean(x))(y-mean(y)) ) / (n-1) になります。この場合、n=25 です。

于 2013-02-23T02:30:33.980 に答える
-2

共分散行列の定義を理解していないと思います。25 x 25 の共分散行列が必要な場合は、それぞれ n 個のデータ ポイントを持つ 25 個のベクトルが必要です。

于 2016-07-31T03:34:22.527 に答える