python-3.x - 使用 scipy 将协方差转换为相关时出错

标签 python-3.x scipy correlation covariance

我正在尝试使用此处的方法将协方差矩阵(来自 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.]]。我显然在做一些愚蠢的事情,但只是不确定是什么,因此感谢所有建议 - 谢谢!

最佳答案

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

corl = gaid @ S @ gaid 

给出您正在寻找的答案。

关于python-3.x - 使用 scipy 将协方差转换为相关时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62213236/

相关文章:

python - 嵌套/转义 f 字符串 "="(等号)表达式

python - cx_Freeze 无法包含 Cython .pyx 模块

python - 为什么这是一个糟糕的冒泡排序算法?

python - Gurobi/python 中的稀疏矩阵 LP 问题

python - Scipy 优化 : Set maximum error

python - 与 Pandas 的时间序列相关性

r - 如何使用 `cor.test` 关联特定列?

python - 在 Python 中确定一个对象是否是类似字节的对象的正确方法是什么?

python - 使用 Python 对原始信号应用合适的巴特沃斯滤波器

r - 在 x 轴上只有一个变量的 Corrplot