首页 > 解决方案 > 在 Python 中计算两个二维数组之间的逐行相关系数

问题描述

我有两个相同大小的 numpy 数组M X T(我们称它们为Aand B)。我想计算A 和 B中同一行m 的每一对之间跨 T 的 Pearson 相关系数(所以,A[i,:]B[i,:],然后A[j,:]B[j,:];但从不A[i,:]B[j,:],例如)。

我希望我的输出是具有 shape 的一维数组(M,)或具有 shape 的二维数组(M,1)

数组非常大(大约 1-2 百万行),所以我正在寻找一个矢量化解决方案,它可以让我避免 for 循环。抱歉,如果已经回答了这个问题,但似乎以前的答案(例如,这个)中的许多代码片段都是为了给出完整的M X M相关矩阵——即所有可能的行对之间的相关系数,而不仅仅是索引匹配的行;我正在寻找的基本上只是这个矩阵的对角线,但是如果我只需要对角线,计算整个东西感觉很浪费 - 事实上,当我尝试这样做时它会抛出内存错误......

实现这一点的最快方法是什么?首先十分感谢。

标签: pythonarraysnumpycorrelation

解决方案


我想我只是使用一个列表理解和一个​​模块来计算系数:

from scipy.stats.stats import pearsonr
import numpy as np

M = 10
T = 4
A = np.random.rand(M*T).reshape((M, T))
B = np.random.rand(M*T).reshape((M, T))
diag_pear_coef = [pearsonr(A[i, :], B[i, :])[0] for i in range(M)]

那对你有用吗?请注意,pearsonr返回的不仅仅是相关系数,因此还有[0]索引。
祝你好运!


推荐阅读