假设我有一个带有形状的二维数组(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:]
但这太低效了。所以我想知道是否有更有效的方式?
答案 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