Python 强大的图论和网络研究工具 networkx

学校组织数学建模比赛,两次模拟练习都需要用到图这个工具,但是自己还没到能随便码出求最短路径的函数,一直都用matlab里面的graphshortestpath函数来求。当遇到要求处理300多对结点的最短路径问题,用matlab可以实现,不过我对matlab半路出家,只是在会调用函数而已,处理字符串、写函数对于我来说好难好难啊!于是网上各种搜,最终找到Python有自己的网络学习的包-Networkx,如遇知己,相见恨晚!

网上好像关于这个包的用法介绍并不多,为了以后工作方便,打算自己学习一下这个库,同时也放上来给对图处理感觉很棘手的小伙伴们抛一个砖吧。

本文只是这个库的一个tutorial,所有内容都是通过直接查看Network的官方文档翻译过来的。

官方介绍是:

NetworkX is a Pythonlanguage software package for the creation, manipulation, and study of thestructure, dynamics, and functions of complex networks.

 

  1. 用来处理无向图、有向图、多重图的Python数据结构
  2. 包含许多标准的图算法
  3. 包括网络结构和分析方法
  4. 用于产生经典图、随机图和综合网络
  5. 节点可以是任何事物(如text, images, XML records)
  6. 边能保存任意起算值(如weights, time-series)
  7. 开源证书 BSD license
  8. 很好的测试结果:超过1800个单元测试,90%的结点覆盖
  9. Python获得的额外优势:快速原型开发方法,容易学,支持多平台。

下面给上连接:

下载链接:

Source and binary releases: http://cheeseshop.python.org/pypi/networkx/

Github (latest development): https://github.com/networkx/networkx/

官方文档:

https://networkx.readthedocs.io/en/stable/index.html

下面进入正题:

创建图


import networkx as nx

G=nx.Graph()

#Graph是结点(向量)与确定的结点对(称作边、链接等)的集合。在Networkx中,结点可以是任何可哈希的对象,

#如文本字符串、图片、XML对象、其他图,自定义对象等。(注意,Python的None对象不应该用作结点,)

#可哈希的:一个对象在它的生存期从来不会被改变(拥有一个哈希方法),能和其他对象区别(有比较方法)

结点

用很多方法来生成。Neatworkx包含很多图生成器函数和工具,可用来以多种格式来读写图。

#我们来看一些简单的操作。

#一次增加一个节点:

G.add_node(1)

#用序列增加一系列的节点

G.add_nodes_from([2,3])

#增加 nbunch结点。 nbunch是可迭代的结点容器 (序列、集合、图、文件等),其本身不是图的某个节点

H=nx.path_graph(10)#type(H) networkx.classes.graph.Graph

G.add_nodes_from(H)#这是将H中的许多结点作为G的节点

G.add_node(H)#这是将H作为G中的一个节点

#查看结点

G.node  #字典  {0: {}, 1: {}, 2: {}, 3: {},4: {}, 5: {}, 6: {}, 7: {}, 8: {}, 9: {}}

. . .

#G能够一次增加一条边

G.add_edge(1,2)   #只能增加边,有属性,除非指定属性名和值“属性名=值”

e=(2,3)

G.add_edge(*e)   #注意! G.add_edge(e)会报错!G.add_edge(e)

#用序列增加一系列结点

G.add_edges_from([(1,2),(1,3)])

#增加 ebunch边。ebunch:包含边元组的容器,比如序列、迭代器、文件等

#这个元组可以是2维元组或 三维元组 (node1,node2,an_edge_attribute_dictionary),an_edge_attribute_dictionary比如:

#{‘weight’:3.1415}

G.add_edges_from(H.edges())

删除


G.remove_node(),G.remove_nodes_from()

G.remove_edge(),G.remove_edges_from()

G.remove_node(H)   #删除不存在的东西会报错

#移除所有的节点和边

G.clear()


G.add_edges_from([(1,2),(1,3)])

G.add_node(1)

G.add_edge(1,2)

G.add_node("spam")

G.add_nodes_from("spam")  # adds 4 nodes: 's', 'p', 'a', 'm'


G.edges(),G.nodes(),G.number_of_edges(),G.number_of_nodes()



还有很多使用方法,有向图创建,绘图等功能简介,详见ipynb文件:

http://pan.baidu.com/s/1kVtuh2v

http://download.csdn.net/detail/yuexiaomao/9621045


你可能感兴趣的:(基础学习,networkx)