在 NumPy 中计算相关性



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

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

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

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

最新更新