【问题标题】:Correlation coefficient of multidimensional arrays多维数组的相关系数
【发布时间】:2014-06-15 03:59:23
【问题描述】:

我想计算两个数组ab之间的相关性; ab 的形状是 (10, 2)。我期望一个形状为(10, 10) 的相关矩阵,其值在[-1, 1] 范围内;每对的相关值。

>>> a
array([[-1.22674504,  0.08136256],
       [ 1.95456381, -1.31209914],
       [ 0.29199221,  0.00573356],
       [ 0.66700798, -0.68239164],
       [-1.03723395, -0.15456914],
       [-0.52541249, -0.21180142],
       [-0.94584861, -0.81954194],
       [ 1.11044632,  2.02689438],
       [-0.12003807,  0.00595059],
       [-0.16873215,  1.06046219]])

>>> b
array([[-0.06960341,  0.01320213],
       [ 0.1108986 , -0.21290515],
       [ 0.01656714,  0.00093034],
       [ 0.03784489, -0.11072692],
       [-0.05885088, -0.02508085],
       [-0.029811  , -0.03436753],
       [-0.05366583, -0.13298134],
       [ 0.06300482,  0.32888998],
       [-0.00681075,  0.00096556],
       [-0.00957357,  0.17207378]])

我使用numpy.corrcoef(a, b) 并得到一个(20, 20) 矩阵,而不是(10, 10)

>>> numpy.corrcoef(a, b)
array([[ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [-1.,  1.,  1.,  1., -1., -1., -1., -1., -1., -1., -1.,  1.,  1.,
         1., -1.,  1.,  1., -1., -1., -1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.],
       [ 1., -1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1., -1.,
        -1.,  1., -1., -1.,  1.,  1.,  1.]]) 

一行是一个具有两个值的观察值,我如何告诉 Python 计算相关性是二维的?为什么每个值都是 -11

【问题讨论】:

  • 你真正想做什么? corrcoef 计算 rows 之间的系数。所以np.all(np.corrcoef(a, b) == np.corrcoef(np.vstack((a, b)))) == True
  • 我想计算每对 a 和 b 的相关性。得到一个 10x10 的矩阵,entry_11 代表 a(第一行)的 element#1 和 b(第一行)的 element#1。这怎么可能?我尝试了 scipy.signal.correlated2d(a,b) 但结果与预期不符。

标签: python numpy multidimensional-array correlation


【解决方案1】:

Matlab 中的xcorr2 可能需要此代码,对吧? 这是2-D cross-correlation

import scipy.signal
print scipy.signal.correlate2d(a, b)

见:http://www.mathworks.co.kr/kr/help/signal/ref/xcorr2.html

也可以看看这个帖子:Computing cross-correlation function?

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多