计算 Python 中两个二维数组之间的行相关系数



我有两个大小相同的 numpy 数组M X T(我们称它们为AB)。我想计算 A 和 B 中同一行m 的每对之间 T 上的皮尔逊相关系数(因此,A[i,:]B[i,:],然后是A[j,:]B[j,:];但永远不会A[i,:]B[j,:],例如)。

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

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

实现这一点的最快方法是什么?提前非常感谢。

我想我只会使用列表理解和模块来计算系数:

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]索引。
祝你好运!

相关内容

  • 没有找到相关文章

最新更新