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

Computing row-wise correlation coefficients between two 2d arrays in 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 到 2 百万行),因此我正在寻找一个矢量化解决方案来避免 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 returns 不仅仅是相关系数,因此 [0] 索引。
祝你好运!