小编ily*_*lya的帖子

高效的列式相关系数计算

原始问题

我将大小为n的行P与大小为n×m的矩阵O的每列相关联.我精心设计了以下代码:

import numpy as np

def ColumnWiseCorrcoef(O, P):
    n = P.size
    DO = O - (np.sum(O, 0) / np.double(n))
    DP = P - (np.sum(P) / np.double(n))
    return np.dot(DP, DO) / np.sqrt(np.sum(DO ** 2, 0) * np.sum(DP ** 2))
Run Code Online (Sandbox Code Playgroud)

它比天真的方法更有效:

def ColumnWiseCorrcoefNaive(O, P):
    return np.corrcoef(P,O.T)[0,1:O[0].size+1]
Run Code Online (Sandbox Code Playgroud)

以下是我在Intel核心上使用numpy-1.7.1-MKL的时间:

O = np.reshape(np.random.rand(100000), (1000,100))
P = np.random.rand(1000)

%timeit -n 1000 A = ColumnWiseCorrcoef(O, P)
1000 loops, best of 3: 787 us per loop
%timeit -n 1000 B = ColumnWiseCorrcoefNaive(O, P)
1000 loops, best of …
Run Code Online (Sandbox Code Playgroud)

performance numpy correlation pearson-correlation

5
推荐指数
1
解决办法
1205
查看次数