从成对的列表中生成Numpy对称矩阵

问题描述 投票:1回答:1

我有一个相关矩阵,但指定为对,例如:

cm = pd.DataFrame({'name1': ['A', 'A', 'B'], 
                   'name2': ['B', 'C', 'C'], 
                   'corr': [0.1, 0.2, 0.3]})
cm
    name1   name2   corr
0   A       B       0.1
1   A       C       0.2
2   B       C       0.3

将其转换为Numpy二维数组相关矩阵的最简单方法是什么?

    A   B   C
A 1.0 0.1 0.2
B 0.1 1.0 0.3
C 0.2 0.3 1.0
python numpy matrix
1个回答
0
投票

一种方法可能是使用networkX构建图形,将corr列设置为边weight,然后使用adjacency matrix获得nx.to_pandas_adjacency

nx.to_pandas_adjacency

import networkx as nx
G = nx.from_pandas_edgelist(cm.rename(columns={'corr':'weight'}), 
                            source='name1', 
                            target='name2', 
                            edge_attr ='weight')

G.edges(data=True)
# EdgeDataView([('A', 'B', {'weight': 0.1}), ('A', 'C', {'weight': 0.2}), 
#               ('B', 'C', {'weight': 0.3})])

adj = nx.to_pandas_adjacency(G)

adj[:] = adj.values + np.eye(adj.shape[0])
© www.soinside.com 2019 - 2024. All rights reserved.