赞
踩
NetworkX是复杂网络研究领域中的常用Python包。本文旨在通过介绍NetworkX中常用的方法等内容,为新手提供一个NetworkX的入门教程。
官方文档地址
允许以可哈希的object作为节点,任何Python object作为边属性。
如何选择使用哪种图:
G = nx.Graph()
DG = nx.DiGraph()
G = nx.Graph(DG)
G.is_directed()
返回布尔值G.add_node(1)
G.add_node(DG)
G.add_nodes_from()
或 nx.path_graph()
path_graph()文档(相当于生成一条线)添加节点 示例代码:
G.add_nodes_from([2, 3])
G.add_nodes_from(range(100, 110))
H = nx.path_graph(10)
G.add_nodes_from(H)
G.add_node('spam') # adds node "spam"
G.add_nodes_from('spam') # adds 4 nodes: 's', 'p', 'a', 'm'
G.add_edge(u, v)
G.add_edges_from([(1, 2), (1, 3)])
G.add_edges_from(H.edges)
add_edge()
add_node()
方法或直接操作分别名为graph edges nodes的属性字典来进行操作示例代码:图
创建带属性的图
G = nx.Graph(day="Friday")
G.graph #输出:{'day': 'Friday'}
为图赋属性(也是修改属性的方法)
G = nx.Graph()
G.graph["Name"] = "Bar"
print(G.graph) #输出:{'Name': 'Bar'}
示例代码:节点
创建含属性的节点,为节点赋属性、删除节点属性,迭代输出节点及其属性数据
G.add_node(1, time="5pm")
G.add_nodes_from([3], time="2pm")
G.nodes[1] #输出:{'time': '5pm'}
G.nodes[1]["room"] = 714 # node must exist already to use G.nodes
del G.nodes[1]["room"] # remove attribute
list(G.nodes(data=True)) #输出:[(1, {'time': '5pm'}), (3, {'time': '2pm'})]
list(G) #G也可以作为G节点的迭代器
添加多个带属性节点
# Add multiple nodes with attributes
G.add_nodes_from([
(1, {"feature": 1, "label": 1}),
(2, {"feature": 2, "label": 2})
])
示例代码:边
添加带属性的边,添加多个带属性的边,为边的属性赋值,迭代输出边及其属性数据
G.add_edge(1, 2, weight=4.7)
G.add_edges_from([(3, 4), (4, 5)], color="red")
G.add_edges_from([(1, 2, {"color": "blue"}), (2, 3, {"weight": 8})])
G[1][2]["weight"] = 4.7
G.edges[1, 2]["weight"] = 4
G.edges[(1, 2)]["weight"] = 4
list(G.edges(data=True)) #跟上面的G.nodes()类似
注意:G.edges属性是只读的,但是可以更改类似G.edges[1, 2]这种object里的属性,举例:G.edges[1, 2]['weight'] = 4
(对multigraph:MG.edges[u, v, key][name] = value
)
添加含weight属性的边 add_weighted_edges_from()函数文档
G.add_weighted_edges_from([(0, 1, 3.0), (1, 2, 7.5)])
注意:如果在Graph/DiGraph中添加两次相同的边会仅更新weight;如果在MultiGraph/MultiDiGraph中则会储存多此边
示例代码:
1 in G # check if node in graph
[n for n in G if n < 3] # iterate through nodes
len(G) # number of nodes in graph
G.number_of_nodes()
G.number_of_edges()
nx.draw(G, with_labels = True)
G.degree[node_id]
G.out_degree(node_id)
G.in_degree(node_id)
G.neighbors(node_id)
返回迭代器G.successors(node_id)
(node_id指向的节点)G.predecessors(node_id)
(指向node_id的节点)G.adj
(adjacency list,详情见后文)G[node_id]
G.adj[node_id]
nx.pagerank(G)
返回PageRank向量 pagerank()文档G.remove_node(n)
G.clear()
G.adj
AdjacencyView({1: {2: {'weight': 0.125}, 3: {'weight': 0.75}}, 2: {1: {'weight': 0.125}, 4: {'weight': 1.2}}, 3: {1: {'weight': 0.75}, 4: {'weight': 0.375}}, 4: {2: {'weight': 1.2}, 3: {'weight': 0.375}}})
G.adjacency()
(1, {2: {'weight': 0.125}, 3: {'weight': 0.75}})
G[1]
的方法也可以访问(相当于 G.adj[1]
),返回值示例:AtlasView({2: {'weight': 0.125}, 3: {'weight': 0.75}})
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。