我有两个大小相同的 numpy 数组M X T
(我们称它们为A
和B
)。我想计算 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]
索引。
祝你好运!