dag有向无环图全称,dag有向无环图应用
有向图没有基类。
用图表的可选数据或属性保存节点和边。
没有方向边。允许自循环,但不允许多条“平行”边。
该节点可以是任何带有可选键/值属性的“散列”python对象。传统上,None不作为节点使用。
边被表示为具有可选键/值属性的节点之间的链接。
参数
Incoming_graph_data(可选,默认值:none)-用于初始化图形的数据。如果没有(默认),将创建一个空形状。数据可以是to-networkx-graph()函数支持的任何格式。包括当前边列表、字典列表、字典列表、网络x图、数字矩阵或2d-ndarrrrrrist。
ATTR(关键字参数,可选)default=noattributes是作为键=值对添加到图表中的属性。
它在哪里
创建一个没有节点和边的空形状结构“空形状”。
G=nx。图表(
g可以用几种方法生长。
节点:
一次添加一个节点:
添加节点(1)).
在容器中添加节点(列表、字典、集合,甚至是文件或其他图表中某一行的节点)。
g.add _ nodes _ from ([ 2,3 ]).
g.add _ nodes _ from(范围(100,110))
h=NX.path_graph(10)).
g .添加节点来自(H)
除了字符串和整数,所有的jzdhf python对象都可以表示自定义节点对象或节点(比如其他图),除了没有对象。
g.add_node(h))。
边缘:
g也可以通过加边来增长。
添加一条边,然后单击,
g.add _ edge ((1,2))))))))))))))))).
边缘列表,
g.add _ edges _ from ([ (1,2),)1,3 ) ]
或者一系列边缘,
g.add_Edges_from(h.Edges)).
如果图形中没有连接某些边的节点,将自动添加这些节点。添加现有节点或边时没有错误。
属性:
每个图、节点和边都可以在相关属性字典中存储键值属性对。密钥必须是jzdhf。默认情况下,这些值为空,但可以通过添加边、添加节点或使用名为graph、node和edge的直接操作属性字典来添加或更改它们。
g=NX.graph(day=Friday ).
g .图表
{ 日:星期五 }
使用add_node(,add_nodes_from)或g.nodes添加节点属性。
g.add_node(1,time=5pm ).
g.add_nodes_from([3],time=2pm ).
G.nodes[1]
{ 时间: 下午5点 }
g . nodes[1][ room ]=714 # nodemstexistalreadytouseg . nodes
delg.nodes [1] [ room ] #删除属性
列表(g.nodes(data=true))
[(1,)时间(:(5pm ) }],(3,)时间(:)2pm ) ]
使用add_edge(、add_edges_from)、下标或g.edges添加边属性。
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][权重]=4.7
g.edges [ 1,2 ] [ weight ]=4
警告:我们有一个像dict到G.edges这样的只读结构,例如G. Edges [1,2]。在…里
这里,使用两组括号来添加/更改数据属性:G.edges[1,2][weight]=4(对于多个图表:MG.edges[u,v,key][name]=value)
快捷方式:
许多常见的图形特性允许Python语法加快报告速度。
1 in G #检查图中的节点
真实的
[n for n in G if n 3] #遍历节点
[1, 2]
len(G) #图中的节点数
五
通常,遍历一个图的所有边的最好方法是通过邻居。据介绍,邻居之间都是相邻听写。形容词或形容词()
对于n,G.adjacency()中的nbrsdict:
.对于nbr,nbrsdict.items()中的eattr:
.如果“重量”用eattr表示:
.#用边缘做些有用的事情
.及格
但是,edges()方法通常更方便:
对于u,v,G.edges.data中的重量(“重量”):
.如果重量不为无:
.#用边缘做些有用的事情
.及格
报告:
使用对象属性和方法获取简单的图形信息。报告通常提供视图而不是容器来减少内存使用。视图将随着图形的更新而更新,类似于dict视图。Objects nodes、edges和adj提供对数据属性(如nodes[n]、edges[u,v]、adj[u][v])和迭代(如nodes.items()、nodes.data(color )、nodes.data(color )、Default=blue )的访问,同样,edges视图存在于nodes、edges、neighbors() adj 和degree中。
有关这些方法和其他各种方法的详细信息,请参见下文。
子类(高级):
Graph类使用dict数据结构的dict。外部dict(节点dict)存储由节点键控的相邻信息。下一个字典(adjlist-dict)表示相邻信息,并存储由邻居键控的边缘数据。Internal dict (edge attr u dict)表示边数据,并存储由属性名键控的边属性值。
这三个dict中的每一个都可以被子类中用户定义的类似dict的对象替换。一般来说,像dict这样的功能应该保持,但是可以增加额外的功能。要替换其中一个dict,请更改类(!idspnonenote)。)创建一个新的图形类。变量为这种类似字典的结构保留了工厂。变量名为节点dict_factory、节点attr_dict_factory、adjlist_inner dict_factory、adjlist_outer dict_factory、边attr_dict_factory和图attr_dict。
Node_dict_factory function(默认:dict)工厂函数,用于创建包含节点属性的dict,并以节点ID为键。它不带参数,返回一个类似dict的对象
node u attr _ dict _ factory:function,(默认:dict)用于创建节点属性dict的工厂函数,其中保存了属性名所键入的属性值。它不带参数,返回一个类似dict的对象
Adjlist_outer_dict_factory函数(默认:dict)factory函数用于创建数据结构中最外层的dict,其中保存了节点键控的相邻信息。它不带参数,返回一个类似dict的对象。
Adjlist_inner_dict_factory函数(默认:dict)factory函数用于创建邻接表dict,其中保存了邻居输入的边数据。它不带参数,返回一个类似dict的对象
Edge_attr_dict_factory函数(默认:dict)用于创建Edge属性dict的工厂函数,存放属性名类型化的属性值。它不带参数,返回一个类似dict的对象。
Graph_attr_dict_factory函数(默认:dict)用于创建图形属性dict的工厂函数,其中保存了按属性名类型化的属性值。它不带参数,返回一个类似dict的对象。
一般来说,如果扩展不影响数据结构,所有方法都会继承,不会有问题,除了:to _ directed/to _ unexpired。默认情况下,这些方法创建一个有向图/图类,您可能希望它们创建一个有向图/图的扩展。为了方便起见,我们定义了两个类变量,可以在子类中设置。
To_directed_class可以调用(默认:有向图或多图)类来使用To_directed方法。如果没有,使用networkx类(有向图或多图)。
To _ unexpired _ class可以调用(默认:图或多图)class来调用To _ unexpired方法。如果没有,使用networkx类(图形或多图形)。
实际案例
创建一个内存不足的图形类,通过对所有边使用一个属性字典来有效地禁用边属性。这将减少使用的内存,但会丢失边属性。
class thing graph(NX。图表):
.all_edge_dict={weight: 1}
.
.def single_edge_dict(self):
.return self.all_edge_dict
.
.edge _ attr _字典_工厂=single _ edge _字典
G=ThinGraph()
G.add_edge(2,1)
G[2][1]
{weight: 1}
G.add_edge(2,2)
G[2][1]是G[2][2]
真实的
关于通过覆盖基类来创建graph子类的更多例子,请参见ordered。字典就像一本字典。