2017-03-07 67 views
1

相關係數 - NumPy的/ Python的

import numpy as np 
A = np.ones([n,m]) 
B = np.ones([o,n,m]) 

是否有任何方式來計算相關係數不用其他循環使得

C = corr(A,B) = array([1,o]) 

mno是用於表示尺寸。

糊塗示例:

from scipy.stats.stats import pearsonr 

A = np.random.random([5,5]) 
B = np.random.random([3,5,5]) 
C = [] 
for i in B: 
    C.append(pearsonr(A.flatten(), i.flatten())[0]) 

C = np.array(C) 
+1

這可能是相關的:['計算之間的兩個多維arrays'的相關係數(HTTP:/ /stackoverflow.com/q/30143417/3293881)。 – Divakar

+0

您可以添加一個我們可以嘗試進行矢量化的工作循環實現嗎? – Divakar

+0

已添加實例@Divakar –

回答

1

我們可以重塑輸入2D版本,使得所述第一輸入被整形到一列陣列和第二個將具有列數後使用來自this postcorr2_coeff同樣作爲其最後兩個軸的組合長度,像這樣 -

corr2_coeff(A.reshape(1,-1),B.reshape(B.shape[0],-1)).ravel() 

樣品運行 -

In [143]: from scipy.stats.stats import pearsonr 
    ...: 
    ...: A = np.random.random([5,5]) 
    ...: B = np.random.random([3,5,5]) 
    ...: C = [] 
    ...: for i in B: 
    ...:  C.append(pearsonr(A.flatten(), i.flatten())[0]) 
    ...: 
    ...: C = np.array(C) 
    ...: 

In [144]: C 
Out[144]: array([ 0.05637413, -0.26749579, -0.08957621]) 

In [145]: corr2_coeff(A.reshape(1,-1),B.reshape(B.shape[0],-1)).ravel() 
Out[145]: array([ 0.05637413, -0.26749579, -0.08957621]) 

對於真正巨大的陣列,我們可能需要求助於一個循環,像這樣 -

[corr2_coeff(A.reshape(1,-1), i.reshape(1,-1)) for i in B]