numpy corrcoef和最小生成树的结果很糟糕

时间:2016-04-22 17:09:15

标签: numpy

我有这段代码:

mm = np.array([[1, 4, 7, 8], [2, 2, 8, 4], [1, 13, 1, 5]])
mm = np.column_stack(mm)

mmCov = np.cov(mm, rowvar=0)
print("covariance\n", mmCov)

# my code to get correlations
mmResCor = np.zeros(shape=(3, 3))
for i in range(len(mmCov)):
    for j in range(len(mmCov[i])):
        mmResCor[i][j] = mmCov[i][j] / (math.sqrt(mmCov[i][i] * mmCov[j] [j]))

print("correlaciones a mano\n", mmResCor)

mmCor = np.corrcoef(mmCov, rowvar=0)
print("correlations\n", mmCor)

X = csr_matrix(mmCor)
XX = minimum_spanning_tree(X)
print("minimun spanning tree\n", XX)

首先:每列代表一个变量,在行中有观察结果

numpy corrcoef使用这种关系与协方差矩阵:

 R_{ij} = \frac{ C_{ij} } { \sqrt{ C_{ii} * C_{jj} } }

当我使用numpy corrcoef时,我得到了这个矩阵

 correlations
 [[ 1.          0.8660254  -0.82603319]
 [ 0.8660254   1.         -0.99717646]
 [-0.82603319 -0.99717646  1.        ]]

但是当我应用“我的代码”来获得相同的结果时......

mmResCor = np.zeros(shape=(3, 3))
for i in range(len(mmCov)):
for j in range(len(mmCov[i])):
    mmResCor[i][j] = mmCov[i][j] / (math.sqrt(mmCov[i][i] * mmCov[j][j]))

我得到了这个矩阵

  correlaciones a mano
  [[ 1.          0.67082039  0.        ]
  [ 0.67082039  1.         -0.5       ]
  [ 0.         -0.5         1.        ]]

如果假设我做的是同样的话,为什么我会得到不同的结果呢?

还有一个问题: 当我应用minimun_spanning_tree时,我得到了这个:

minimun spanning tree
(0, 2)  -0.826033187631
(1, 2)  -0.997176464953

有没有办法表示这些或者我可以将这个结果保存在某些变量中吗?

1 个答案:

答案 0 :(得分:1)

np.corrcoef应将数据作为输入。您已将协方差矩阵作为输入传递。如果传递数据,则会得到与手动计算相同的结果:

>>> np.corrcoef(mm, rowvar=0)
array([[ 1.        ,  0.67082039,  0.        ],
       [ 0.67082039,  1.        , -0.5       ],
       [ 0.        , -0.5       ,  1.        ]])

关于最小生成树,我不确定您的问题是什么,但输出XX是一个稀疏矩阵,用于存储树的矩阵表示。