networkx(二)

Graph Creation

有三种方式来创建networkx的图形对象:
1.图生成器-创建网络拓扑的标准算法
2.从源文件中导入数据
3.自己添加边和节点

import networkx as nx
G = nx.Graph()
G.add_edge(1,2)#默认边的值为1
G.add_edge(2,3,weight=0.9)#指定边的值为0.9

边的属性可以是任何东西

import math
G.add_edge('y','x',function = math.cos)
G.add_node(math.cos)#节点可以是任何可hash的值

你可以一次性添加很多条边:

elist = [(1,2),(2,3),(1,4),(4,2)]
G.add_edges_from(elist)#通过定义好的边的list来添加边
elist = [('a','b',5.0),('b','c',3.0),('a','c',1.0),('c','d',7.3)]#通过list定义边和边的权值
G.add_weighted_edges_from(elist)#将定义好的边和权值加载进图中

Graph Reporting

类方法提供了节点,邻居,边和度的信息,这些方法采用迭代的方式进行调用

边的基本关系可以通过两种方式获得,一种是以节点为中心,如G[U].一种以边缘为中心,如G.edges[u,v]。用哪种方式不重要。G.edges中删除了无向边的重复表示

函数提供比边,邻居,度更多的信息。这些信息提供在Algorithms中

Algorithms

networkx本身提供了很多内置的算法,例子如下

G = nx.Graph()
e = [('a','b',0.3),('b','c',0.9),('a','c',0.5),('c','d',1.2)]
G.add_weighted_edges_from(e)#将列表加载为图,其中包含了边的权值信息
print(nx.dijkstra_path(G,'a','d'))#输出图G中a到d的路线
['a', 'c', 'd']

Drawing

扫描二维码关注公众号,回复: 8991050 查看本文章

networkx官方推荐使用Graphviz或者matplotlib来进行画图

import matplotlib.pyplot as plt
G = nx.cubical_graph()
plt.subplot(121)
<matplotlib.axes._subplots.AxesSubplot at 0x1ec105f2eb8>

nx.draw(G)

在这里插入图片描述

plt.subplot(122)
<matplotlib.axes._subplots.AxesSubplot at 0x1ec12753a58>

在这里插入图片描述

nx.draw(G,pos=nx.circular_layout(G),node_color='r',edge_color='b')

在这里插入图片描述

Data Structure

networkx 使用“dictionary of dictionaries of dictionaries(不知道怎么翻译)”作为基本的网络数据结构,这可以为大型稀疏网络提供合理存储的快速查找。

dict-of-dicts-of-dicts数据结构的好处
1.查找边和删除边使用两次字典查找
2.因为使用系数存储进行快速查找,所以首选“list”
3.因为可以将数据添加到边上,所以首选“sets”
4.G[u][v]返回字典中的边方法
5.n in G:用来测试n 是否在G中
6.for n in G:遍历整个图形
7.for nbr in G[n]:遍历邻居
例子如下

G = nx.Graph()
G.add_edge("A","B")
G.add_edge("B","C")
print(G.adj)
{'A': {'B': {}}, 'B': {'A': {}, 'C': {}}, 'C': {'B': {}}}

每个基本图类的数据结构都会略微变形。
·对于DiGraph,提供了两种dict-of-dicts-dicts结构,一种用于后继(G.succ),一种用于前任(G.pred)。
·对于MultiGraph / MultiDiGraph,我们使用dict-of-dicts-of-dicts-of-dicts 1,其中第三个字典由边缘关键字标识符键入到第四个字典,该字典包含两个节点之间该边缘的边缘属性

G[u][v][‘width’]和G.edges[u,v][‘width’]功能是相同的

G = nx.Graph()
G.add_edge(1,2,color='red',weight=0.84,size = 300)
print(G[1][2]['size'])
300
print(G.edges[1,2]['color'])
red

发布了9 篇原创文章 · 获赞 0 · 访问量 442

猜你喜欢

转载自blog.csdn.net/zr1213159840/article/details/104188425