我尝试使用以下方法将协方差矩阵(来自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.]]
。我显然在做一些愚蠢的事情,但只是不知道是什么,所以所有的建议感激地收到-谢谢!
2条答案
按热度按时间jhiyze9q1#
你现在可能已经弄明白了,但是你必须使用@运算符来进行numpy中的矩阵乘法。运算符 * 用于逐元素乘法。所以呢
给出了你正在寻找的答案。
0qx6xfy62#
这只是为了将来,如果其他人想要一个完整的答案,从相关性转换到协方差,以及所问的问题,从协方差转换到相关性。让我们使用下面的一些测试数据:
以下函数将相关矩阵转换为协方差矩阵:
下面的函数将协方差矩阵转换为相关矩阵