python通过datafram权值矩阵创建netdrawx的双向有权图
时间: 2024-05-15 08:16:28 浏览: 21
可以使用NetworkX库创建双向有权图,然后从dataframe中读取权值矩阵,将其添加到图中。
以下是一个示例代码:
```python
import networkx as nx
import pandas as pd
# 创建空的有向图
G = nx.DiGraph()
# 读取权值矩阵
weights_df = pd.read_csv('weights.csv', index_col=0)
# 添加节点
for node in weights_df.index:
G.add_node(node)
# 添加边和权值
for i, row in weights_df.iterrows():
for j, weight in row.iteritems():
if weight != 0:
G.add_edge(i, j, weight=weight)
G.add_edge(j, i, weight=weight)
# 可以将图绘制出来查看
nx.draw(G, with_labels=True)
# 也可以输出节点和边的信息
print('Nodes: ', G.nodes)
print('Edges: ', G.edges.data())
```
其中,`weights.csv`是一个包含权值矩阵的文件,格式如下:
```
,Node1,Node2,Node3
Node1,0,1,2
Node2,1,0,3
Node3,2,3,0
```
输出结果如下:
```
Nodes: ['Node1', 'Node2', 'Node3']
Edges: [('Node1', 'Node2', {'weight': 1}), ('Node1', 'Node3', {'weight': 2}), ('Node2', 'Node1', {'weight': 1}), ('Node2', 'Node3', {'weight': 3}), ('Node3', 'Node1', {'weight': 2}), ('Node3', 'Node2', {'weight': 3})]
```
这个图包含三个节点,六条边,每条边都有一个权值。