networkx专栏【python】——入门与教程
注:本篇内容参考NetworkX官网教程
创建一个图像
创建一个不含nodes(节点)和edges(边)的空白图像。
import networkx as nx
G = nx.Graph()
根据定义,Graph(图)是nodes(节点)(顶点)以及已识别的节点对(称为边、连线等)的集合。在NetworkX中,所有hashable object(哈希值对象) 都是nodes(节点),比如文本字符串,图像,XML对象,Graph对象,自定义节点 等等。
hashable object(哈希值对象):含有一个哈希值并且永不改变的对象是哈希值对象(即含有一个__hash__()方法),而且可以与其他对象进行比较(即含有一个__eq__()方法)。含有相同的哈希值才会让哈希值对象相同。哈希性使对象可用作字典键和集合成员,因为这些数据结构在内部使用哈希值。大多数Python的不可更改值的内置对象都是哈希的;而可改变值的对象(比如列表或字典)并不是;一些不可更改值的对象(比如元组和不可变集合)只有在所有元素都是哈希值时才是哈希的。所有自定义类的对象默认都是哈希的。它们相较而言都是不等的(除了它们自身),因为它们的哈希值是id()。
- Note:Python的None对象不可作为node使用。这决定了在许多函数中是否分配了可选函数参数。
Nodes(节点)
图像对象G的元素添加可以有许多种方式。NetworkX包括许多图形生成器函数和工具,可以读取和写入多种格式的图形。
首先通过简单的操作来开始。每次添加一个node(节点)
G.add_node(1)
或者通过迭代构造器添加nodes,比如列表
G.add_nodes_from([2,3])
也可以在添加节点的同时设置属性,只需要在构造器里按照==(node, node_attribute_dict)==的元组格式添加内容即可
G.add_nodes_from([
(4, {
"color": "red"}),
(5, ("color", "green")),
])
节点的属性在下文有详细介绍。
可以从别的Graph对象中继承节点
H = nx.path_graph(10)
G.add_nodes_from(H)
此时G将H中所有节点作为自己的节点。
相反地,也可以将H作为G的一个节点
G.add_node(H)
这种灵活性是非常强大的,它允许graphs of graphs, graphs of files, graphs of functions and much more。可以考虑如何在实际应用中搭建关系,将节点作为有用的实体。当然,您可以在G中始终使用唯一标识符,如果愿意的话,还可以使用一个单独的字典,按标识符键接节点信息。
- Note:如果节点对象的哈希值是它的内容,那就不要改动它。
Edges(边)
G可以一次添加一条边
G.add_edge(1,2)
e = (2,3)
G.add_edge(*e)
也可以添加列表
G.add_edges_from([(1,2),(1,3)])
或者是 ebunch对象里的边。ebunch对象是储存边元组(edge-tuple)的迭代构造器。一个边元组可以是2个元素元组的点或3个元素构建2个点,比如(2,3,{“weight”: 3.1415})。边的属性在下文详细介绍。
G.add_edges_from(H.edges)
添加已存在的节点或边不会报错。比如,先清空节点和边
G.clear()
当我们添加节点/边时,NetworkX会完全忽视已经存在的节点/边
G.add_edges_from([(1,2),(1,3)])
G.add_node(1)
G.add_edge(1,2)
G.add_node("spam") # add node "spam"
G.add_nodes_from("spam") # add 4 nodes: "s", "p", "a", "m"
G.add_edge(3, "m")
至此,G含有8个节点和3个边,可以用下面的方法查看
G.number_of_nodes()
G.number_of_edges()
- Note:邻接报告的顺序(例如,G.adj, G.successors,G.predecessors)是边相加的顺序。然而,G.edge的顺序是邻接的顺序,它既包括节点的顺序,也包括每个节点的邻接顺序。请看下面的例子:
DG = nx.DiGraph()
DG.add_edge(2,1) # adds the nodes in order 2, 1
DG.add_edge(1,3)
DG.add_edge(2,4)
DG.add_edge(1,2)
assert list(DG.successors(2)) == [1,4]
assert list(DG.edges) == [(2,1),(2,4),(1,3),(1,2)]
检查Graph对象的元素
有4个基本的graph属性实用报告来检查节点和边:G.nodes,G.edges,G.adj和G.degree。这些是图中节点、边、邻居(邻接)和节点度的类似集合的视