PyGraph#
- class PyGraph(multigraph=True, attrs=None, *, node_count_hint=None, edge_count_hint=None)#
基础:
object一个用于创建无向图的类
PyGraph 类用于创建无向图。它可以是一个多重图(节点之间存在多条边)。每个节点和边(尽管很少用于边)都通过整数ID进行索引。这些ID在图对象的整个生命周期中是稳定的,并且在节点或边删除时,图的索引列表中可能会出现空缺。节点索引在移除后的添加操作中会被重复利用。例如:
import rustworkx as rx graph = rx.PyGraph() graph.add_nodes_from(list(range(5))) graph.add_nodes_from(list(range(2))) graph.remove_node(2) print("After deletion:", graph.node_indices()) res_manual = graph.add_node(None) print("After adding a new node:", graph.node_indices())
After deletion: NodeIndices[0, 1, 3, 4, 5, 6] After adding a new node: NodeIndices[0, 1, 2, 3, 4, 5, 6]
此外,每一个节点和边都可以包含任意的 Python 对象作为权重/数据负载。您可以像下面这个例子一样使用索引来访问数据负载:
import rustworkx as rx graph = rx.PyGraph() data_payload = "An arbitrary Python object" node_index = graph.add_node(data_payload) print("Node Index: %s" % node_index) print(graph[node_index])
Node Index: 0 An arbitrary Python object
PyGraph 实现了节点的 Python 映射协议,除了访问之外,你还可以通过以下方式更新数据载荷:
import rustworkx as rx graph = rx.PyGraph() data_payload = "An arbitrary Python object" node_index = graph.add_node(data_payload) graph[node_index] = "New Payload" print("Node Index: %s" % node_index) print(graph[node_index])
Node Index: 0 New Payload
默认情况下,
PyGraph是一个多重图(意味着节点之间可以存在平行边),但可以通过在调用PyGraph构造函数时将multigraph参数设置为False来禁用此功能。例如:import rustworkx as rx graph = rx.PyGraph(multigraph=False)
这只能在
PyGraph初始化时设置,创建后无法调整。当multigraph设为False时,如果调用会添加平行边的方法,它将改为更新现有边的权重/数据负载。每个
PyGraph对象都有一个attrs属性,它用于存储图实例的附加属性/元数据。默认情况下此属性设置为None,但也可以通过在使用attrs关键字参数构建新图时进行指定:graph = rustworkx.PyGraph(attrs=dict(source_path='/tmp/graph.csv'))
此属性可以设置为任何Python对象。此外,在创建对象后您可以访问和修改此属性。例如:
source_path = graph.attrs graph.attrs = {'new_path': '/tmp/new.csv', 'old_path': source_path}
PyGraph对象允许的最大节点和边数各为 \(2^{32} - 1\)(4,294,967,294)个。尝试添加超过此数量的节点或边将导致抛出异常。- Parameters:
multigraph (bool) – 当此项设为
False时,创建的 PyGraph 对象将不再是多重图。当为False时,若执行的方法调用会添加平行边,则该调用中的权重/权重值将用于就地更新现有边。attrs (Any) – 一个可选属性载荷,用于分配给
attrs属性。这可以是任意 Python 对象。如果 未指定,attrs将被设置为None。node_count_hint (int) – 一个可选提示,会在需要扩展前预先分配足够容量存储这么多节点。这不会预先填充任何节点的数据,如果事先已知图的完整大小,这只是一个潜在的性能优化。
edge_count_hint (int) – 一个可选提示,将在需要扩展前分配足够的容量来存储这么多边。这不会预先填充任何边的数据,只有在事先知道图的完整大小时,才能作为潜在的性能优化。
方法
在2个节点之间添加一条边。
向图中添加新的边。
在没有python数据的情况下向图中添加新的边。
在图中添加一个新节点。
向图中添加新节点。
获取一个节点的邻居索引和数据。
清除所有节点和边
清除所有边,保留节点不变
将另一个PyGraph对象添加到这个PyGraph中
使用一个新节点替换一组节点。
返回图的浅拷贝
获取节点的度
获取边索引映射
返回所有边索引的列表.
返回指定节点之间所有边的索引列表
获取边的列表
返回本图中边诱导子图的新的PyGraph对象
返回所有边数据的列表。
从边列表中扩展图
从加权边列表扩展图
根据边数据负载的某些条件筛选图的边,并返回这些边的索引。
根据节点数据负载的某些条件对图的节点进行筛选,并返回这些节点的索引。
按指定的权重在此图中查找节点 从邻接矩阵创建一个新的
PyGraph对象,矩阵元素类型为float根据邻接矩阵创建一个新的
PyGraph对象,矩阵元素类型为complex返回两节点之间所有边的数据。
返回两个节点之间边的数据。
通过给定索引返回边的数据
通过指定索引返回边的端点
返回给定节点索引的节点数据
检查
node_a和node_b之间是否存在任何无向边。检查节点是否存在于图中。
检测图形是否具有平行边
返回与指定节点相关联的边索引列表。
获取一个节点的所有边的端点索引与边数据。
返回与指定节点连边的索引映射
返回与指定节点相连的边索引列表
获取一个节点的邻居。
返回所有节点索引的列表。
返回所有节点索引的列表。
返回所有节点数据的列表。
返回图中边的数量
返回图中节点的数量
返回与指定节点相关联的边索引列表。
获取一个节点所有边的端点索引与边数据。
读取边缘列表文件并基于其内容创建一个新的 PyGraph 对象
移除2个节点之间的边。
移除由提供的索引标识的边
从图中移除边。
从图中移除一个节点。
从图中移除节点。
返回该图子图的一个新PyGraph对象。
返回一个表示该图子图的新 PyGraph 对象,以及一个将子图节点映射到原始图节点的 NodeMap 对象。
substitute_node_with_subgraph(self, node, other, edge_map_fn, /, node_filter=None, edge_weight_map=None
从该图表生成一个新的
PyDiGraph对象从图生成dot文件
在原地更新边的权重/有效载荷
通过边的索引就地更新边的权重/数据载荷
获取带权重的边列表
从 PyGraph 对象写入边缘列表文件
属性
- attrs#
- multigraph#
图是否为多图(允许节点之间存在多条边)
如果设置为
False,则不允许节点之间存在多个边,并且会更新现有边而非添加平行边的调用。