您的位置:首页 > 理论基础 > 计算机网络

NetworkX 图网络处理工具包

2020-04-01 18:40 169 查看
简单介绍

NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.

这个工具包对于图网络的处理非常有用,涵盖了很多算法,用法也非常友好。这里也贴出几个常用链接:

建议直接下一份pdf放着随时查。接下来直接说常规用法,首先:

import networkx as nx
Graph 创建

既然是处理网络,首先需要创建一个图对象,类型有:

G = nx.Graph()          # 无向图
G = nx.DiGraph()        # 有向图
G = nx.MultiGraph()     # 多重无向图
G = nx.MultiDigraph()   # 多重有向图
G.clear()               # 清空图

接着,需要给图添加内容,比如加点,加边:

G.add_edge(1, 2)             # default edge data=1
G.add_edge(2, 3, weight=0.9) # specify edge data
# 如果是边有许多的权,比如有长度和宽度的属性,那么:
G.add_edge(n1, n2, length=2, width=3)

elist = [(1, 2), (2, 3), (1, 4), (4, 2)]
G.add_edges_from(elist)
elist = [('a', 'b', 5.0), ('b', 'c', 3.0), ('a', 'c', 1.0), ('c', 'd', 7.3)]
G.add_weighted_edges_from(elist)

# 如果给结点的名称是其它符号,想离散化成从x开始的数字标记,那么:
G = nx.convert_node_labels_to_integers(G, first_label=x)
Graph 信息的获取
nx.info(G) # 图信息的概览
G.number_of_nodes()
G.number_of_edges()
# 获取和节点idx连接的边的attr属性之和
G.in_degree(idx, weight='attr')

# 如果想知道某个结点相连的某个边权之和:
DG.degree(nodeIdx, weight='weightName')

# 获取结点或者边的属性集合,返回的是元组的列表
G.nodes.data('attrName')
G.edges.data('attrName')

# 获取n1 n2的边的length权重,那么:
G[n1][n2]['length']
# 如果是有重边的图,选择n1,n2第一条边的length权重,则:
G[n1][n2][0]['length']

# 获取n1结点的所有邻居
nx.all_neighbors(G, n1)

# 判断图中n1到n2是否存在路径
nx.has_path(G, n1, n2)
# 根据一个结点的list,获取子图
subG = nx.subgraph(G, nodeList)
Graph 其他内置算法
# 最短路算法 返回最短路的路径列表
nx.shortest_path(G, n1, n2, method='dijkstra')
# 以及各种图的算法,比如流,割等等等等,大家可以看文档探索下
Graph 的绘制
# 最简单的绘制
import matplotlib.pyplot as plt
nx.draw(G)
plt.show()

# 设置其他乱七八糟的参数
nx.draw(G,
with_labels=True,
pos = nx.sprint_layout(G),
node_color=color_list,
edge_color='k',
node_size=100,
node_shape='o',
linewidths=2,
width=1.0,
alpha=0.55,
style='solid',
font_size=9,
font_color='k'
)

转载于:https://www.cnblogs.com/Rosebud/p/10483560.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
dlsq3814 发布了0 篇原创文章 · 获赞 0 · 访问量 223 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: