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

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

2016-09-03 19:56 429 查看
学校组织数学建模比赛,两次模拟练习都需要用到图这个工具,但是自己还没到能随便码出求最短路径的函数,一直都用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.
 
用来处理无向图、有向图、多重图的Python数据结构
包含许多标准的图算法
包括网络结构和分析方法
用于产生经典图、随机图和综合网络
节点可以是任何事物(如text, images, XML records)
边能保存任意起算值(如weights, time-series)
开源证书 BSD
license
很好的测试结果:超过1800个单元测试,90%的结点覆盖
从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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐