【问题标题】:correlation matrix in pythonpython中的相关矩阵
【发布时间】:2019-12-20 21:16:44
【问题描述】:

如何在 python 中计算相关矩阵?我有一个 n 维向量,其中每个元素都有 5 维。例如我的向量看起来像

[ [0.1, .32, .2, 0.4, 0.8], [.23, .18, .56, .61, .12], [.9, .3, .6, .5, .3], [.34, .75, .91, .19, .21] ]

在这种情况下,向量的维度是 4,并且该向量的每个元素都有 5 维度。如何用最简单的方式构造矩阵?

谢谢

【问题讨论】:

    标签: python


    【解决方案1】:

    使用numpy,你可以使用np.corrcoef

    In [88]: import numpy as np
    
    In [89]: np.corrcoef([[0.1, .32, .2, 0.4, 0.8], [.23, .18, .56, .61, .12], [.9, .3, .6, .5, .3], [.34, .75, .91, .19, .21]])
    Out[89]: 
    array([[ 1.        , -0.35153114, -0.74736506, -0.48917666],
           [-0.35153114,  1.        ,  0.23810227,  0.15958285],
           [-0.74736506,  0.23810227,  1.        , -0.03960706],
           [-0.48917666,  0.15958285, -0.03960706,  1.        ]])
    

    【讨论】:

    • 谢谢。对于我的实际应用程序,我收到以下错误 AttributeError: 'int' object has no attribute 'corrcoef'
    • 听起来您已将np 定义为int。上面,numpy 已导入为np。您需要消除两者的歧义。
    • 如何绘制相关矩阵。我尝试过使用以下函数 imshow(corr_matrix, interpolation='bilinear') colorbar() show() 图形矩阵的原点是 (0,n) 而不是 (0,0)。我怎样才能做到这一点。矩阵的维度是 5000X5000
    【解决方案2】:

    如果您不想重新编写矩阵,也可以使用 np.array。

    import numpy as np
    a = np.array([ [0.1, .32, .2,  0.4, 0.8], [.23, .18, .56, .61, .12], [.9,   .3,  .6,  .5,  .3],  [.34, .75, .91, .19, .21]]) 
    b = np.corrcoef(a)
    print b
    

    【讨论】:

    • 如果你想要列之间的关联,而不是行之间的关联,np.corrcoef(a.T)
    【解决方案3】:

    这是使用 Python 计算多个时间序列的相关矩阵的pretty good example。包含的源代码使用 Pandas、NumPy 和 matplotlib 计算一组外汇货币对的相关矩阵,以生成相关图。

    样本数据是一组历史数据文件,输出是单个相关矩阵和图。代码有很好的文档记录。

    【讨论】:

      【解决方案4】:

      由于我几乎错过了@Anton Tarasenko 的评论,我将提供一个新的答案。所以给定你的数组:

      a = np.array([[0.1, .32, .2,  0.4, 0.8], 
                   [.23, .18, .56, .61, .12], 
                   [.9,   .3,  .6,  .5,  .3],  
                   [.34, .75, .91, .19, .21]]) 
      

      如果你想要我假设的维度(列)的相关矩阵,你可以使用 numpy(注意转置!):

      import numpy as np
      print(np.corrcoef(a.T))
      

      或者如果你在 Pandas 中有它:

      import pandas as pd
      print(pd.DataFrame(a).corr())
      

      都打印

      array([[ 1.        , -0.03783885,  0.34905716,  0.14648975, -0.34945863],
            [-0.03783885,  1.        ,  0.67888519, -0.96102583, -0.12757741],
            [ 0.34905716,  0.67888519,  1.        , -0.45104803, -0.80429469],
            [ 0.14648975, -0.96102583, -0.45104803,  1.        , -0.15132323],
            [-0.34945863, -0.12757741, -0.80429469, -0.15132323,  1.        ]])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-30
        • 2016-06-20
        • 2013-10-14
        • 2019-08-31
        • 2012-11-04
        • 1970-01-01
        • 2019-12-07
        相关资源
        最近更新 更多