计算 Python 中两个二维数组之间的逐行相关系数
Computing row-wise correlation coefficients between two 2d arrays in Python
我有两个相同大小的 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 到 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]
索引。
祝你好运!
我有两个相同大小的 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 到 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]
索引。
祝你好运!