networkx
networkx在2002年5月产生,是用python语言编写的软件包,便于用户对复杂网络进行创建、操作和学习。利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等。
一、建立图或网络
1.手动创建无向图
在PythonWin 的Shell里输入:
import networkx as nx #导入NetworkX包,为了少打几个字母,将其重命名为nx
G = nx.Graph() #建立一个空的无向图G
G.add_node(1) #添加一个节点1
G.add_edge(2,3) #添加一条边2-3(隐含着添加了两个节点2、3)
G.add_edge(3,2) #对于无向图,边3-2与边2-3被认为是一条边
print G.nodes() #输出全部的节点: [1, 2, 3]
print G.edges() #输出全部的边:[(2, 3)]
print G.number_of_edges() #输出边的数量:1
有向图的建立方式和无向图基本类似,只是在上述代码的第二行,将G = nx.Graph()
改为 G = nx.DiGraph()
。(同时,有向图和无向图是可以相互转化的,分别用到Graph.to_undirected()
和 Graph.to_directed()
两个方法)
有向图和无向图都可以给边赋予权重,用到的方法是add_weighted_edges_from
,它接受1个或多个三元组[u,v,w]作为参数,其中u是起点,v是终点,w是权重。例如:
G.add_weighted_edges_from([(0,1,3.0),(1,2,7.5)]) #添加0-1和1-2两条边,权重分别是3.0和7.5。
如果想读取权重,可以使用get_edge_data
方法,它接受两个参数u和v,即边的起讫点。例如:
print G.get_edge_data