在numpy中计算相关性

时间:2018-05-14 05:53:31

标签: python numpy

假设我有一个带有形状的二维数组(n_rows_ma,n_cols_ma)和一个带有形状的二维数组mb(n_rows_mb,n_cols_mb)。现在我想计算ma中每一行与mb中每一行之间的相关性。 最简单的方法可能是

import numpy as np
correlation = np.corrcoef(ma,mb)[:n_rows_ma,n_rows_ma:]

但这太低效了。所以我想知道是否有更有效的方式?

1 个答案:

答案 0 :(得分:0)

corrcoef的公式很容易实现,这样我们只能计算我们想要使用的内容:

>>> import numpy as np
>>> 
>>> ma = np.random.random((5,6))
>>> mb = np.random.random((3,6))
>>> 
>>> za = ma - ma.mean(axis=1, keepdims=True)
>>> za /= np.sqrt(np.einsum('ij,ij->i', za, za))[:, None]
>>> zb = mb - mb.mean(axis=1, keepdims=True)
>>> zb /= np.sqrt(np.einsum('ij,ij->i', zb, zb))[:, None]
>>> 
>>> cc = np.einsum('ik,jk', za, zb)
>>> 
>>> np.allclose(cc, np.corrcoef(np.r_[ma, mb])[:5, 5:])
True