4

假设我有一组向量(来自传感器 1 的读数、来自传感器 2 的读数、来自传感器 3 的读数——首先按时间戳索引,然后按传感器 ID 索引),我想将它们与一组单独的向量(温度、湿度等——也都首先按时间戳索引,然后按类型索引)。

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。)

一个更复杂但纯粹是 numpy 的解决方案是

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,请熟悉广播索引的规则。他们将帮助您尽可能地降低到 C 级别。

于 2009-04-28T13:28:54.000 回答
1

这会做你想要的吗?

correlations = dot(transpose(a), b)

注意:如果你这样做,你可能首先要标准化或变白ab例如与此等价的东西:

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

正如大卫所说,你应该定义你正在使用的相关性。我不知道在关联空信号和非空信号时给出合理数字的任何相关定义。

于 2009-04-27T23:11:40.830 回答