python - 在 Python 中计算两个二维数组之间的逐行相关系数
问题描述
我有两个相同大小的 numpy 数组M X T
(我们称它们为A
and B
)。我想计算A 和 B中同一行m 的每一对之间跨 T 的 Pearson 相关系数(所以,A[i,:]
和B[i,:]
,然后A[j,:]
和B[j,:]
;但从不A[i,:]
和B[j,:]
,例如)。
我希望我的输出是具有 shape 的一维数组(M,)
或具有 shape 的二维数组(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
返回的不仅仅是相关系数,因此还有[0]
索引。
祝你好运!
推荐阅读
- hyperledger-fabric - Hyperledger Explorer 未在 8080 上启动(发现问题)
- unity3d - Vuforia 加载白色矩形而不是视频
- julia - 具有不同大小向量的 Julia 数组
- java - Angular 6 应用程序的茶叶分析
- pandas - 从 Google BigQuery 创建熊猫数据框时如何执行 na_values
- java - 显示 FragmentDialog 时如何使应用程序全屏显示
- android - 在哪里可以找到 Android 设备驱动程序的源代码?
- java - Eclipse 控制台显然错误地计算了 1,000,000 的阶乘
- html - 空 id 或 null id 是良好的 HTML 做法吗?有条件地将 id 添加到 html 元素
- python - 从字典键(组合)生成字符串并根据值分配布尔值