首页 > 解决方案 > 使用 scipy 将协方差转换为相关时出错

问题描述

我正在尝试使用此处的方法将协方差矩阵(来自 scipy.optimize.curve_fit)转换为相关矩阵: https ://math.stackexchange.com/questions/186959/correlation-matrix-from-covariance-matrix

我的测试数据来自这里https://blogs.sas.com/content/iml/2010/12/10/converting-between-correlation-and-covariance-matrices.html

我的代码在这里

    import numpy as np

    S = [[1.0,  1.0,  8.1],
         [1.0, 16.0, 18.0],
         [8.1, 18.0, 81.0] ]

    S = np.array(S)
    diag = np.sqrt(np.diag(np.diag(S)))
    gaid = np.linalg.inv(diag)
    corl = gaid * S * gaid
    print(corl)

我期待看到[[1. 0.25 0.9 ], [0.25 1. 0.5 ], [0.9 0.5 1. ]]但得到[[1. 0. 0.], [0. 1. 0.], [0. 0. 1.]]。我显然在做一些愚蠢的事情,但不确定是什么,所以所有的建议都得到了感激 - 谢谢!

标签: python-3.xscipycorrelationcovariance

解决方案


您现在可能已经弄清楚了,但是您必须使用 @ 运算符在 numpy 中进行矩阵乘法。运算符 * 用于逐元素乘法。所以

corl = gaid @ S @ gaid 

给出您正在寻找的答案。


推荐阅读