Python库:networkx

NetworkX 是一个用于创建、操作和研究复杂网络(图)的 Python 库。提供了丰富的数据结构和算法,适用于图论、社交网络分析、生物信息学、地理信息系统等多个领域。NetworkX 的设计目标是灵活、高效,并且易于扩展。


1. 创建图

NetworkX 支持创建多种类型的图,包括无向图(Graph)、有向图(DiGraph)、多重图(MultiGraph)和多重有向图(MultiDiGraph)。

import networkx as nx

# 创建无向图
G = nx.Graph()

# 创建有向图
D = nx.DiGraph()

# 创建多重图
MG = nx.MultiGraph()

# 创建多重有向图
MD = nx.MultiDiGraph()

2. 添加节点和边

可以向图中添加节点和边,节点可以是任何可哈希的对象,边可以带有权重和其他属性。

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

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

# 添加带权重的边
G.add_edge(1, 2, weight=0.5)
G.add_edges_from([(2, 3, {'weight': 0.3}), (3, 1, {'weight': 0.2})])

3. 图的属性和方法

NetworkX 提供了许多方法来查询和操作图的属性。

# 获取节点和边的数量
num_nodes = G.number_of_nodes()
num_edges = G.number_of_edges()

# 获取图的邻接矩阵
adj_matrix = nx.adjacency_matrix(G)

# 获取图的度
degrees = G.degree()

# 获取图的连通分量
connected_components = list(nx.connected_components(G))

4. 图的遍历

NetworkX 支持多种图遍历算法,包括深度优先搜索(DFS)和广度优先搜索(BFS)。

# 深度优先搜索
dfs_path = nx.dfs_tree(G, source=1)

# 广度优先搜索
bfs_path = nx.bfs_tree(G, source=1)

5. 最短路径和中心性

NetworkX 提供了多种最短路径算法和中心性度量。

# 最短路径
shortest_path = nx.shortest_path(G, source=1, target=3)

# 最短路径长度
shortest_path_length = nx.shortest_path_length(G, source=1, target=3)

# 介数中心性
betweenness_centrality = nx.betweenness_centrality(G)

# 接近中心性
closeness_centrality = nx.closeness_centrality(G)

6. 图的可视化

NetworkX 可以与 Matplotlib 结合使用,方便地进行图的可视化。

import matplotlib.pyplot as plt

# 绘制图
nx.draw(G, with_labels=True)
plt.show()

7. 图的生成和分析

NetworkX 提供了多种图生成器和分析工具,例如随机图、小世界网络、无标度网络等。

# 生成随机图
ER = nx.erdos_renyi_graph(10, 0.5)

# 生成小世界网络
WS = nx.watts_strogatz_graph(10, 4, 0.1)

# 生成无标度网络
BA = nx.barabasi_albert_graph(10, 3)

8. 导入和导出图

NetworkX 支持多种图格式,可以方便地导入和导出图数据。

# 导出图到 GEXF 格式
nx.write_gexf(G, "graph.gexf")

# 从 GEXF 格式导入图
G = nx.read_gexf("graph.gexf")

安装

可以通过 pip 安装 NetworkX:

pip install networkx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司南锤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值