两个2D数组之间的相关性(默认为“有效”大小写):
您可以
np.dot像这样简单地使用矩阵乘法-
out = np.dot(arr_one,arr_two.T)
与
"valid"两个输入数组的每个成对行组合(row1,row2)之间的默认情况的关联将对应于每个(row1,row2)位置处的乘法结果。
两个2D数组的行相关系数的计算:
def corr2_coeff(A, B): # Rowwise mean of input arrays & subtract from input arrays themeselves A_mA = A - A.mean(1)[:, None] B_mB = B - B.mean(1)[:, None] # Sum of squares across rows ssA = (A_mA**2).sum(1) ssB = (B_mB**2).sum(1) # Finally get corr coeff return np.dot(A_mA, B_mB.T) / np.sqrt(np.dot(ssA[:, None],ssB[None]))
这是基于此解决方案
How to apply corr2 functions in Multidimentional arrays inMATLAB
标杆管理
本部分将运行时性能与针对其他答案中列出的基于
generate_correlation_map&循环
pearsonr的方法的建议方法进行比较。(取自该函数
test_generate_correlation_map()末尾没有值正确性验证代码的函数)。请注意,建议的方法的时间安排还包括在开始时进行检查,以检查两个输入数组中的列数是否相等,就像在其他答案中所做的那样。接下来列出运行时。
情况1:
In [106]: A = np.random.rand(1000, 100)In [107]: B = np.random.rand(1000, 100)In [108]: %timeit corr2_coeff(A, B)100 loops, best of 3: 15 ms per loopIn [109]: %timeit generate_correlation_map(A, B)100 loops, best of 3: 19.6 ms per loop
情况2:
In [110]: A = np.random.rand(5000, 100)In [111]: B = np.random.rand(5000, 100)In [112]: %timeit corr2_coeff(A, B)1 loops, best of 3: 368 ms per loopIn [113]: %timeit generate_correlation_map(A, B)1 loops, best of 3: 493 ms per loop
情况3:
In [114]: A = np.random.rand(10000, 10)In [115]: B = np.random.rand(10000, 10)In [116]: %timeit corr2_coeff(A, B)1 loops, best of 3: 1.29 s per loopIn [117]: %timeit generate_correlation_map(A, B)1 loops, best of 3: 1.83 s per loop
另一种循环
pearsonr based方法似乎太慢,但是这里是一个小数据大小的运行时-
In [118]: A = np.random.rand(1000, 100)In [119]: B = np.random.rand(1000, 100)In [120]: %timeit corr2_coeff(A, B)100 loops, best of 3: 15.3 ms per loopIn [121]: %timeit generate_correlation_map(A, B)100 loops, best of 3: 19.7 ms per loopIn [122]: %timeit pearsonr_based(A, B)1 loops, best of 3: 33 s per loop
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)