IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python networkx库 -> 正文阅读

[Python知识库]Python networkx库

NetworkX 是用于创建、操作复杂图数据结构的 Python 包。

安装:

pip install networkx

1. 增删节点和边

import networkx as nx


G = nx.Graph()

G.add_node(1)                	# 添加一个节点
G.add_nodes_from([2, 3])     	# 添加多个节点

G.remove_node(1)                # 删除一个节点
G.remove_nodes_from([2, 3])     # 删除多个节点

G.add_edge(1, 2)                      		# 添加一条边
G.add_edges_from([(1, 3), (2, 3)])    		# 添加多条边

G.remove_edge(1, 2)                         # 删除一条边
G.remove_edges_from([(1, 3), (2, 3)])       # 删除多条边

n_nodes = G.number_of_nodes()    # 节点数
n_edges = G.number_of_edges()    # 边数

图的节点甚至可以是另一个图:

G1 = nx.Graph()
G2 = nx.Graph()

G.add_nodes_from([G1, G2])
G.add_edge(G1, G2)

2. 文件操作

(1)边列表格式

在边列表文件中,每一行表示一条边(以及可选的属性):

1 2
1 3
2 3
# 将图以边列表的形式保存至文件
nx.write_edgelist(G, 'edgelist.txt')

# 读取边列表文件,并构建图
G = nx.read_edgelist('edgelist.txt')

(2)gml格式

gml 格式如下:

graph
[
  directed 0
  node
  [
    id 0
    label "BrighamYoung"
    value 7
  ]
  node
  [
    id 1
    label "FloridaState"
    value 0
  ]
  ...
  edge
  [
    source 1
    target 0
  ]
  ...
# 写入文件
nx.write_gml(G, 'football.gml')

# 读取文件,并构建图
G = nx.read_gml('football.gml', label='id')

3. 获取邻接矩阵

G: nx.Graph = nx.read_edgelist('../data/karate.txt')

A = nx.adj_matrix(G).todense()
print(A)
[[0 1 1 ... 0 0 0]
 ...
 [0 0 0 ... 0 1 0]]

4. 节点和边属性

属性可自定义。

(1)节点属性

# color 属性
G.add_node(1, color="red")
G.add_nodes_from([(2, {"color": "green"}), (3, {"color": "blue"})])

attr = G.nodes[1]    # {'color': 'red'}
G.nodes[1]['color'] = 'black'

(2)边属性

# weight 属性
G.add_edge(1, 2, weight=4.7)
G.add_edges_from([(1, 3, {'weight': 2.3}), (2, 3, {'weight': 6.5})])

attr = G[1][2]        # {'weight': 4.7}
G[1][2]['weight'] = 4.8

5. 遍历节点

(1)遍历节点、节点属性

G = nx.read_gml('../data/football.gml', label='id')

for node in G.nodes():
    print(f"{node}: {G.nodes[node]}")
0: {'label': 'BrighamYoung', 'value': 7}
1: {'label': 'FloridaState', 'value': 0}
...

或:

G = nx.read_gml('../data/football.gml', label='id')

for node, attr in G.nodes(data='label'):
    print(f'{node}: {attr}')
0: BrighamYoung
1: FloridaState
...

(2)遍历节点、邻居、连边属性

# 节点及其邻居节点
for node, neighs in G.adj.items():
    
    # 邻居节点及连边属性
    for neigh, edge_attr in neighs.items():
        print(f"({node}, {neigh}, {edge_attr})")
(1, 2, {'weight': 4.7})
(1, 3, {'weight': 2.3})
(2, 1, {'weight': 4.7})
(2, 3, {'weight': 6.5})
(3, 1, {'weight': 2.3})
(3, 2, {'weight': 6.5})

6. 遍历边

(1)遍历边

G: nx.Graph = nx.read_gml('../data/football.gml', label='id')

for edge in G.edges():
    print(edge)
(0, 1)
(0, 4)
...

(2)遍历边、边属性

G = nx.Graph()

G.add_node(1, color="red")
G.add_nodes_from([(2, {"color": "green"}), (3, {"color": "blue"})])
G.add_edge(1, 2, weight=4.7)
G.add_edges_from([(1, 3, {'weight': 2.3}), (2, 3, {'weight': 6.5})])

for u, v in G.edges():
    print(f'edge: ({u}, {v}), attrs: {G[u][v]}')
edge: (1, 2), attrs: {'weight': 4.7}
edge: (1, 3), attrs: {'weight': 2.3}
edge: (2, 3), attrs: {'weight': 6.5}

或者:

for edge, attrs in G.edges().items():
    print(f'edge: {edge}, attrs: {attrs}')

7. 可视化

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_nodes_from([1, 2, 3])
G.add_edges_from([(1, 2), (1, 3), (2, 3)])

# 节点对应的类别,不同类别的节点染不同颜色
partition = {
    1: 0,
    2: 1,
    3: 0,
}

pos = nx.spring_layout(G)

# 分别绘制节点、边、节点标签
nx.draw_networkx_nodes(G, pos, partition.keys(), node_size=300,
                       alpha=0.3, node_color=list(partition.values()))
nx.draw_networkx_edges(G, pos, alpha=0.5)
nx.draw_networkx_labels(G, pos)

plt.show()
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:56:01  更:2021-09-19 07:58:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:55:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码