我有这段代码:
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
有没有办法表示这些或者我可以将这个结果保存在某些变量中吗?
答案 0 :(得分:1)
np.corrcoef
应将数据作为输入。您已将协方差矩阵作为输入传递。如果传递数据,则会得到与手动计算相同的结果:
>>> np.corrcoef(mm, rowvar=0)
array([[ 1. , 0.67082039, 0. ],
[ 0.67082039, 1. , -0.5 ],
[ 0. , -0.5 , 1. ]])
关于最小生成树,我不确定您的问题是什么,但输出XX
是一个稀疏矩阵,用于存储树的矩阵表示。