如何摆脱循环并使相关矩阵函数更高效



我有这个函数来计算相关矩阵并按预期工作,但是我试图提高效率并摆脱循环,但我在这样做时遇到了麻烦。我在下面的函数:

def correlation(X):
    N = X.shape[0]  # num of rows
    D = X.shape[1]  # num of cols
    covarianceMatrix = np.cov(X)  # start with covariance matrix
    # use covarianceMatrix to create size of M
    M = np.zeros([covarianceMatrix.shape[0], covarianceMatrix.shape[1]])
    for i in range(covarianceMatrix.shape[0]):
        for j in range(covarianceMatrix.shape[1]):
           corr = covarianceMatrix[i, j] / np.sqrt(np.dot(covarianceMatrix[i, i], covarianceMatrix[j, j]))
           M[i,j]  = corr
    return M
使用

numpy 而不是使用其内置的函数(如 corrcoef())执行此计算的更有效方法是什么?

获得协方差矩阵后,只需乘以对角线平方根反比的乘积即可。使用代码片段作为起点:

covarianceMatrix = np.cov(X)
tmp = 1.0 / np.sqrt(np.diag(covarianceMatrix))
corr = covarianceMatrix.copy()
corr *= tmp[:, None]
corr *= tmp[None, :]

如果您有复杂的值,则有点困难,并且您可能应该通过以下方式在 -1 和 1 之间剪辑:

np.clip(corr, -1, 1, out=corr)

相关内容

  • 没有找到相关文章

最新更新