【问题标题】:Computing row-wise correlation coefficients between two 2d arrays in Python [duplicate]在Python中计算两个二维数组之间的逐行相关系数[重复]
【发布时间】:2018-12-03 21:46:58
【问题描述】:

我有两个相同大小的 numpy 数组M X T(我们称它们为AB)。我想计算 A 和 B 中每对 同一行 m 之间的 Pearson 相关系数(所以,A[i,:]B[i,:],然后是 A[j,:]B[j,:] ; 但绝不是 A[i,:]B[j,:],例如)。

我希望我的输出是形状为(M,) 的一维数组或形状为(M,1) 的二维数组。

数组非常大(大约 1-2 百万行),所以我正在寻找一种矢量化解决方案,可以让我避免 for 循环。抱歉,如果已经回答了这个问题,但似乎以前的答案(例如,this one)中的许多代码 sn-ps 旨在提供完整的M X M 相关矩阵 - 即所有可能对之间的相关系数行数,而不仅仅是索引匹配的行;我正在寻找的基本上只是这个矩阵的对角线,但是如果我只需要对角线,计算整个东西感觉很浪费 - 事实上,当我尝试这样做时它会抛出内存错误......

最快的实现方法是什么?提前非常感谢。

【问题讨论】:

    标签: python arrays numpy correlation


    【解决方案1】:

    我想我会使用列表理解和模块来计算系数:

    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] 索引。
    祝你好运!

    【讨论】:

    • 好的,谢谢!我认为这是像这样简单的事情,但我是 Python 的新手,并且仍然围绕列表理解。再次感谢。
    • 有趣的是在 numpy 或 scipy 中没有实现此功能?
    猜你喜欢
    • 2015-07-20
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多