使用 scipy 将协方差转换为相关性时出错
Error converting covariance to correlation using scipy
我正在尝试使用此处的方法将协方差矩阵(从 scipy.optimize.curve_fit)转换为相关矩阵:
https://math.stackexchange.com/questions/186959/correlation-matrix-from-covariance-matrix
我的代码在这里
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.]]
。我显然在做一些愚蠢的事情,但不确定是什么,所以非常感谢收到所有建议 - 谢谢!
你现在可能已经明白了,但你必须在 numpy 中使用 @ 运算符进行矩阵乘法。运算符 * 用于逐元素乘法。
所以
corl = gaid @ S @ gaid
给出了您正在寻找的答案。
我正在尝试使用此处的方法将协方差矩阵(从 scipy.optimize.curve_fit)转换为相关矩阵: https://math.stackexchange.com/questions/186959/correlation-matrix-from-covariance-matrix
我的代码在这里
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.]]
。我显然在做一些愚蠢的事情,但不确定是什么,所以非常感谢收到所有建议 - 谢谢!
你现在可能已经明白了,但你必须在 numpy 中使用 @ 运算符进行矩阵乘法。运算符 * 用于逐元素乘法。 所以
corl = gaid @ S @ gaid
给出了您正在寻找的答案。