4

別のベクトルのセット(温度、湿度など-すべて、最初にタイムスタンプで、次にタイプでインデックス付けされます)。

これを行うためのnumpyの最もクリーンな方法は何ですか?かなり単純な関数のようです...

言い換えれば、私は見たいです:

> a.shape 
(365,20)

> b.shape
(365, 5)

> correlations = magic_correlation_function(a,b)

> correlations.shape
(20, 5)

乾杯、/ YGA

PS私は例を追加するように頼まれました。

これが私が見たいものです:

$ In [27]:  x
$ Out[27]: 
array([[ 0,  0,  0],
       [-1,  0, -1],
       [-2,  0, -2],
       [-3,  0, -3],
       [-4,  0.1, -4]])

$ In [28]: y
$ Out[28]: 
array([[0, 0],
       [1, 0],
       [2, 0],
       [3, 0],
       [4, 0.1]])

$ In [28]: magical_correlation_function(x, y)
$ Out[28]: 
array([[-1.        ,  0.70710678,  1.        ]
       [-0.70710678,  1.        ,  0.70710678]])

Ps2:おっと、私の例を誤記しました。申し訳ありません。修正されました。

4

3 に答える 3

2

私が見つけた最も簡単なことは、scipy.statsパッケージを使用することでした

In [8]: x
Out[8]: 
array([[ 0. ,  0. ,  0. ],
       [-1. ,  0. , -1. ],
       [-2. ,  0. , -2. ],
       [-3. ,  0. , -3. ],
       [-4. ,  0.1, -4. ]])
In [9]: y
Out[9]: 
array([[0. , 0. ],
       [1. , 0. ],
       [2. , 0. ],
       [3. , 0. ],
       [4. , 0.1]])

In [10]: import scipy.stats

In [27]: (scipy.stats.cov(y,x)
          /(numpy.sqrt(scipy.stats.var(y,axis=0)[:,numpy.newaxis]))
          /(numpy.sqrt(scipy.stats.var(x,axis=0))))
Out[27]: 
array([[-1.        ,  0.70710678, -1.        ],
       [-0.70710678,  1.        , -0.70710678]])

これらはあなたが得た数ではありませんが、あなたはあなたの行を混同しています。(要素[0,0]は1である必要があります。)

より複雑ですが、純粋に厄介な解決策は

In [40]: numpy.corrcoef(x.T,y.T)[numpy.arange(x.shape[1])[numpy.newaxis,:]
                                 ,numpy.arange(y.shape[1])[:,numpy.newaxis]]
Out[40]: 
array([[-1.        ,  0.70710678, -1.        ],
       [-0.70710678,  1.        , -0.70710678]])

これは、x内の各要素とx内の他の要素との相関を計算するため、遅くなりますが、これは望ましくありません。また、必要な配列のサブセットを取得するために使用される高度なインデックス作成技術は、頭を痛める可能性があります。

numpyを多用する場合は、ブロードキャストインデックス作成のルールをよく理解してください。彼らはあなたが可能な限り経営幹部レベルにプッシュダウンするのに役立ちます。

于 2009-04-28T13:28:54.000 に答える
1

これはあなたが望むことをしますか?

correlations = dot(transpose(a), b)

注:これを行う場合は、おそらく標準化または白化aして、b最初に、たとえばこれと同等のものを使用することをお勧めします。

a = sqrt((a - mean(a))/(var(a)))
b = sqrt((b - mean(b))/(var(b)))
于 2009-04-28T21:10:06.683 に答える
-1

Davidが言ったように、使用している相関関係を定義する必要があります。空の信号と空でない信号を相関させるときに意味のある数値を与える相関の定義を私は知りません。

于 2009-04-27T23:11:40.830 に答える