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个节点之间添加一条边。

add_edges_from

向图中添加新的边。

add_edges_from_no_data

在没有python数据的情况下向图中添加新的边。

add_node

在图中添加一个新节点。

add_nodes_from

向图中添加新节点。

adj

获取一个节点的邻居索引和数据。

清除

清除所有节点和边

clear_edges

清除所有边,保留节点不变

合并

将另一个PyGraph对象添加到这个PyGraph中

contract_nodes

使用一个新节点替换一组节点。

复制

返回图的浅拷贝

获取节点的度

edge_index_map

获取边索引映射

edge_indices

返回所有边索引的列表.

edge_indices_from_endpoints

返回指定节点之间所有边的索引列表

edge_list

获取边的列表

edge_subgraph

返回本图中边诱导子图的新的PyGraph对象

返回所有边数据的列表。

extend_from_edge_list

从边列表中扩展图

extend_from_weighted_edge_list

从加权边列表扩展图

filter_edges

根据边数据负载的某些条件筛选图的边,并返回这些边的索引。

filter_nodes

根据节点数据负载的某些条件对图的节点进行筛选,并返回这些节点的索引。

find_node_by_weight

按指定的权重在此图中查找节点

from_adjacency_matrix

从邻接矩阵创建一个新的PyGraph对象,矩阵元素类型为float

from_complex_adjacency_matrix

根据邻接矩阵创建一个新的 PyGraph 对象,矩阵元素类型为 complex

get_all_edge_data

返回两节点之间所有边的数据。

get_edge_data

返回两个节点之间边的数据。

get_edge_data_by_index

通过给定索引返回边的数据

get_edge_endpoints_by_index

通过指定索引返回边的端点

get_node_data

返回给定节点索引的节点数据

has_edge

检查node_anode_b之间是否存在任何无向边。

has_node

检查节点是否存在于图中。

has_parallel_edges

检测图形是否具有平行边

in_edge_indices

返回与指定节点相关联的边索引列表。

in_edges

获取一个节点的所有边的端点索引与边数据。

incident_edge_index_map

返回与指定节点连边的索引映射

incident_edges

返回与指定节点相连的边索引列表

邻居

获取一个节点的邻居。

node_indexes

返回所有节点索引的列表。

node_indices

返回所有节点索引的列表。

节点

返回所有节点数据的列表。

num_edges

返回图中边的数量

num_nodes

返回图中节点的数量

out_edge_indices

返回与指定节点相关联的边索引列表。

out_edges

获取一个节点所有边的端点索引与边数据。

read_edge_list

读取边缘列表文件并基于其内容创建一个新的 PyGraph 对象

remove_edge

移除2个节点之间的边。

remove_edge_from_index

移除由提供的索引标识的边

remove_edges_from

从图中移除边。

remove_node

从图中移除一个节点。

remove_nodes_from

从图中移除节点。

子图

返回该图子图的一个新PyGraph对象。

subgraph_with_nodemap

返回一个表示该图子图的新 PyGraph 对象,以及一个将子图节点映射到原始图节点的 NodeMap 对象。

substitute_node_with_subgraph

substitute_node_with_subgraph(self, node, other, edge_map_fn, /, node_filter=None, edge_weight_map=None

to_directed

从该图表生成一个新的 PyDiGraph 对象

to_dot

从图生成dot文件

update_edge

在原地更新边的权重/有效载荷

update_edge_by_index

通过边的索引就地更新边的权重/数据载荷

weighted_edge_list

获取带权重的边列表

write_edge_list

从 PyGraph 对象写入边缘列表文件

属性

attrs#
multigraph#

图是否为多图(允许节点之间存在多条边)

如果设置为False,则不允许节点之间存在多个边,并且会更新现有边而非添加平行边的调用。