多维数组的相关系数

2 投票
1 回答
9024 浏览
提问于 2025-04-18 04:43

我想计算两个数组 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 呢?

1 个回答

2

你可能需要这个代码来使用 xcorr2Matlab 中,对吧?这个是 2-D 交叉相关 的代码。

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

可以查看这个链接: http://www.mathworks.co.kr/kr/help/signal/ref/xcorr2.html

另外也可以看看这个帖子: 计算交叉相关函数?

撰写回答