有没有更快的方法来获得相关系数?

Is there a faster way to get correlation coefficents?

我有两个大型数据集 A (100,000x10,000) 和 B (100,000x250),我想计算它们之间的 Pearson 相关性。

带有 metric='correlation'scipy.spatial.distance.cdist 函数完全符合我的要求。

corr = 1 - cdist(A.T,B.T,'correlation')

但是它花费的时间大约是 numpy.corrcoef 的 5 倍,尽管我可以丢弃它的大部分,其中在其中一个数据集内计算了相关性。

corr = corrcoef(np.hstack((A,B)).T)[len(A.T):,:len(A.t)].T

有没有更好的方法来快速做到这一点?

你可以试试这个实现,我没有足够的内存来测试你的输入大小。

看起来函数实现在内部使用 python 循环 here

def pairwise_correlation(A, B):
    am = A - np.mean(A, axis=0, keepdims=True)
    bm = B - np.mean(B, axis=0, keepdims=True)
    return am.T @ bm /  (np.sqrt(
        np.sum(am**2, axis=0,
               keepdims=True)).T * np.sqrt(
        np.sum(bm**2, axis=0, keepdims=True)))