如何高效计算两个二维数组对应列之间的皮尔逊相关性?

问题描述 投票:0回答:1

我有两个大型 2D numpy 数组 A 和 B(每个数组都有维度

(18000,18000)
)。我想计算两个数组对应列之间的皮尔逊相关性(即天真地计算

corr_vec = [np.corrcoef(A[:, i], B[:, i])[0,1] for i in range(A.shape[0])]

简单的 for 循环当然非常慢。我尝试使用内置的成对 np.corrcoef() 并通过提取描述两个数组的相应列的部分来获得我想要的结果。

filter_index = A.shape[0]
corr_vec = np.corrcoef(A, B, rowvar = False)[:filter_index, filter_index:].diagonal()

但是,np.corrcoef 仍然计算 A 内的列、B 内的列以及 A 和 B 之间的所有其他列组合的所有可能的成对相关性,而我只需要 A 和 B 的位置对应列。是否有一种有效的方法这个任务的方法?

python numpy memory-efficient
1个回答
0
投票

直接使用相关公式:

a = (A - A.mean(0))/A.std(0)
b = (B - B.mean(0))/B.std(0)

(a * b).mean(0)
© www.soinside.com 2019 - 2024. All rights reserved.