dgl

dgl 包包含用于存储结构和特征数据的数据结构 (即 DGLGraph 类),以及用于生成、操作 和转换图的实用工具。

图形创建操作

用于从原始数据格式构建DGLGraph的操作符。

graph(data, *[, num_nodes, idtype, device, ...])

创建一个图形并返回。

heterograph(data_dict[, num_nodes_dict, ...])

创建一个异构图并返回。

from_cugraph(cugraph_graph)

Create a graph from a cugraph.Graph object.

from_scipy(sp_mat[, eweight_name, idtype, ...])

从SciPy稀疏矩阵创建图形并返回。

from_networkx(nx_graph[, node_attrs, ...])

从NetworkX图创建一个图并返回。

bipartite_from_scipy(sp_mat, utype, etype, vtype)

从SciPy稀疏矩阵创建一个单向二分图并返回。

bipartite_from_networkx(nx_graph, utype, ...)

从NetworkX图创建一个单向二分图并返回。

rand_graph(num_nodes, num_edges[, idtype, ...])

生成一个具有给定节点/边数的随机图并返回。

rand_bipartite(utype, etype, vtype, ...[, ...])

生成一个随机的单向二分图并返回。

knn_graph(x, k[, algorithm, dist, exclude_self])

根据k-最近邻(KNN)从一组点构建图并返回。

segmented_knn_graph(x, k, segs[, algorithm, ...])

根据k近邻(KNN)从多组点构建多个图并返回。

radius_graph(x, r[, p, self_loop, ...])

从一组点中构建一个图,这些点的邻居在给定距离内。

create_block(data_dict[, num_src_nodes, ...])

Create a message flow graph (MFG) as a DGLBlock object.

block_to_graph(block)

Convert a message flow graph (MFG) as a DGLBlock object to a DGLGraph.

merge(graphs)

将一系列图形合并成一个单一的图形。

子图提取操作

用于提取和返回子图的操作符。

node_subgraph(graph, nodes, *[, ...])

返回在给定节点上诱导的子图。

edge_subgraph(graph, edges, *[, ...])

返回在给定边上诱导的子图。

node_type_subgraph(graph, ntypes[, ...])

返回由给定节点类型诱导的子图。

edge_type_subgraph(graph, etypes[, ...])

返回由给定边类型诱导的子图。

in_subgraph(graph, nodes, *[, ...])

返回由给定节点的所有边类型的入边所诱导的子图。

out_subgraph(graph, nodes, *[, ...])

返回由给定节点的所有边类型的出边诱导的子图。

khop_in_subgraph(graph, nodes, k, *[, ...])

返回由指定节点的k跳入邻域诱导的子图。

khop_out_subgraph(graph, nodes, k, *[, ...])

返回由指定节点的k跳出邻域诱导的子图。

图变换操作

通过操作现有图的结构来生成新图的运算符。

add_edges(g, u, v[, data, etype])

将边添加到图中并返回一个新图。

add_nodes(g, num[, data, ntype])

向图中添加给定数量的节点并返回一个新图。

add_reverse_edges(g[, readonly, copy_ndata, ...])

为输入图中的每条边添加一条反向边,并返回一个新图。

add_self_loop(g[, edge_feat_names, ...])

为图中的每个节点添加自环并返回一个新图。

adj_product_graph(A, B, weight_name[, etype])

创建一个加权图,其邻接矩阵是给定两个图的邻接矩阵的乘积。

adj_sum_graph(graphs, weight_name)

创建一个加权图,其邻接矩阵是给定图的邻接矩阵之和,其中行表示源节点,列表示目标节点。

compact_graphs(graphs[, always_preserve, ...])

给定一组具有相同节点集的图,找出并消除所有图中共同的孤立节点。

khop_adj(g, k)

返回矩阵 \(A^k\),其中 \(A\) 是图 \(g\) 的邻接矩阵。

khop_graph(g, k[, copy_ndata])

Return the graph whose edges connect the k-hop neighbors of the original graph.

knn_graph(x, k[, algorithm, dist, exclude_self])

根据k-最近邻(KNN)从一组点构建图并返回。

laplacian_lambda_max(g)

返回图的归一化对称拉普拉斯矩阵的最大特征值。

line_graph(g[, 回溯, 共享])

返回此图的线图。

metapath_reachable_graph(g, metapath)

返回一个图,其中任何节点 u 的后继节点是从 u 通过给定的元路径可达的节点。

metis_partition(g, k[, extra_cached_hops, ...])

这是使用Metis分区对图进行分区。

metis_partition_assignment(g, k[, ...])

这使用Metis分区算法将节点分配到不同的分区。

norm_by_dst(g[, etype])

基于目标节点度计算每条边的归一化系数。

partition_graph_with_halo(g, node_part, ...)

对图进行分区。

radius_graph(x, r[, p, self_loop, ...])

从一组点中构建一个图,这些点的邻居在给定距离内。

remove_edges(g, eids[, etype, store_ids])

移除指定的边并返回一个新图。

remove_nodes(g, nids[, ntype, store_ids])

移除指定的节点并返回一个新图。

remove_self_loop(g[, etype])

移除图中每个节点的自环并返回一个新图。

reorder_graph(g[, node_permute_algo, ...])

返回一个新图,其中节点和边根据指定的排列算法重新排序/重新标记。

reverse(g[, copy_ndata, copy_edata, ...])

返回一个新图,其中每条边都是输入图中边的反向。

segmented_knn_graph(x, k, segs[, algorithm, ...])

根据k近邻(KNN)从多组点构建多个图并返回。

sort_csr_by_tag(g, tag[, tag_offset_name, ...])

返回一个新的图,其CSR矩阵按给定的标签排序。

sort_csc_by_tag(g, tag[, tag_offset_name, ...])

返回一个新图,其CSC矩阵按给定标签排序。

to_bidirected(g[, copy_ndata, readonly])

将图转换为双向简单图并返回。

to_block(g[, dst_nodes, include_dst_in_src, ...])

Convert a graph into a bipartite-structured block for message passing.

to_cugraph(g)

Convert a DGL graph to a cugraph.Graph and return.

to_double(g)

将此图转换为使用 float64(双精度)来处理任何浮点边和节点特征数据。

to_float(g)

将此图转换为使用 float32(单精度)来处理任何浮点边和节点特征数据。

to_half(g)

将此图转换为使用float16(半精度)来处理任何浮点边和节点特征数据。

to_heterogeneous(G, ntypes, etypes[, ...])

将同构图转换为异构图并返回。

to_homogeneous(G[, ndata, edata, ...])

将异构图转换为同构图并返回。

to_networkx(g[, node_attrs, edge_attrs, ...])

将图转换为NetworkX图并返回。

to_simple(g[, return_counts, ...])

将图转换为没有平行边的简单图并返回。

to_simple_graph(g)

将图转换为没有多重边的简单图。

图位置编码操作:

用于生成每个节点的位置编码的操作符。

random_walk_pe(g, k[, eweight_name])

Random Walk Positional Encoding, as introduced in Graph Neural Networks with Learnable Structural and Positional Representations

lap_pe(g, k[, padding, return_eigval])

Laplacian Positional Encoding, as introduced in Benchmarking Graph Neural Networks

double_radius_node_labeling(g, src, dst)

双半径节点标签,如基于图神经网络的链接预测中所述。

shortest_dist(g[, root, return_paths])

计算给定图上的最短距离和路径。

svd_pe(g, k[, padding, random_flip])

SVD-based Positional Encoding, as introduced in Global Self-Attention as a Replacement for Graph Convolution

图分区工具

metis_partition(g, k[, extra_cached_hops, ...])

这是使用Metis分区对图进行分区。

metis_partition_assignment(g, k[, ...])

这使用Metis分区算法将节点分配到不同的分区。

partition_graph_with_halo(g, node_part, ...)

对图进行分区。

批处理和读取操作

用于将多个图批量处理为一个图的运算符,以及用于计算单个图和批量图的图级表示的运算符。

batch(graphs[, ndata, edata])

将一组DGLGraph批量处理为一个图,以提高图计算的效率。

unbatch(g[, node_split, edge_split])

通过将给定的图拆分为一系列小图来撤销批处理操作。

slice_batch(g, gid[, store_ids])

从一批图中获取特定的图。

readout_nodes(graph, feat[, weight, op, ntype])

通过聚合节点特征 feat 生成图级别的表示。

readout_edges(graph, feat[, weight, op, etype])

graph中对边缘特征feat进行求和,可以选择性地将其乘以边缘weight

sum_nodes(graph, feat[, weight, ntype])

Syntax sugar for dgl.readout_nodes(graph, feat, weight, ntype=ntype, op='sum').

sum_edges(graph, feat[, weight, etype])

Syntax sugar for dgl.readout_edges(graph, feat, weight, etype=etype, op='sum').

mean_nodes(graph, feat[, weight, ntype])

Syntax sugar for dgl.readout_nodes(graph, feat, weight, ntype=ntype, op='mean').

mean_edges(graph, feat[, weight, etype])

Syntax sugar for dgl.readout_edges(graph, feat, weight, etype=etype, op='mean').

max_nodes(graph, feat[, weight, ntype])

Syntax sugar for dgl.readout_nodes(graph, feat, weight, ntype=ntype, op='max').

max_edges(graph, feat[, weight, etype])

Syntax sugar for dgl.readout_edges(graph, feat, weight, etype=etype, op='max').

softmax_nodes(graph, feat, *[, ntype])

对节点特征执行图级别的softmax。

softmax_edges(graph, feat, *[, etype])

对边缘特征执行图级别的softmax。

broadcast_nodes(graph, graph_feat, *[, ntype])

Generate a node feature equal to the graph-level feature graph_feat.

broadcast_edges(graph, graph_feat, *[, etype])

Generate an edge feature equal to the graph-level feature graph_feat.

topk_nodes(graph, feat, k, *[, descending, ...])

通过在graph中的节点特征feat上按索引sortby进行图级别的top-k操作,返回图级别的表示。

topk_edges(graph, feat, k, *[, descending, ...])

通过在图graph中对边特征feat按索引sortby进行图级别的top-k操作,返回图级别的表示。

图遍历与消息传播

DGL 实现了图遍历算法,这些算法作为 Python 生成器实现,每次迭代返回访问过的节点或边的集合(以 ID 张量形式)。命名约定为 _[nodes|edges]_generator。以下是一个使用示例。

g = ...  # some DGLGraph
for nodes in dgl.bfs_nodes_generator(g, 0):
    do_something(nodes)

bfs_nodes_generator(graph, source[, reverse])

使用广度优先搜索的节点边界生成器。

bfs_edges_generator(graph, source[, reverse])

使用广度优先搜索的边缘前沿生成器。

topological_nodes_generator(graph[, reverse])

使用拓扑遍历的节点边界生成器。

dfs_edges_generator(graph, source[, reverse])

使用深度优先搜索(DFS)的边缘前沿生成器。

dfs_labeled_edges_generator(graph, source[, ...])

在深度优先搜索(DFS)中生成按类型标记的边。

DGL 提供了 API 来按照图遍历顺序执行消息传递。prop_nodes_XXX 调用遍历算法 XXX 并在每次迭代时对访问的节点集触发 pull()prop_edges_YYY 应用遍历算法 YYY 并在每次迭代时对访问的边集触发 send_and_recv()

prop_nodes(graph, nodes_generator[, ...])

Functional method for dgl.DGLGraph.prop_nodes().

prop_nodes_bfs(graph, source, message_func, ...)

使用BFS生成的节点前沿进行消息传播。

prop_nodes_topo(graph, message_func, reduce_func)

使用由拓扑顺序生成的节点前沿进行消息传播。

prop_edges(graph, edges_generator[, ...])

Functional method for dgl.DGLGraph.prop_edges().

prop_edges_dfs(graph, source, message_func, ...)

使用由标记DFS生成的边缘前沿进行消息传播。

同质性测量

用于测量图的同质性的实用工具

edge_homophily(graph, y)

同质性测量来自 Beyond Homophily in Graph Neural Networks: Current Limitations and Effective Designs

node_homophily(graph, y)

同质性测量来自 Geom-GCN: Geometric Graph Convolutional Networks

linkx_homophily(graph, y)

同质性测量来自 非同质性图上的大规模学习:新基准和强大的简单方法

adjusted_homophily(graph, y)

Characterizing Graph Datasets for Node Classification: Homophily-Heterophily Dichotomy and Beyond中推荐的同质性测量

标签信息量测量

用于测量图标签信息量的实用工具

edge_label_informativeness(graph, y[, eps])

标签信息量(\(\mathrm{LI}\))是在Characterizing Graph Datasets for Node Classification: Homophily-Heterophily Dichotomy and Beyond中提出的标记图的一个特征。

node_label_informativeness(graph, y[, eps])

标签信息量(\(\mathrm{LI}\))是在Characterizing Graph Datasets for Node Classification: Homophily-Heterophily Dichotomy and Beyond中提出的标记图的一个特征。

Utilities

其他用于控制随机性、保存和加载图形、设置和获取运行时配置的实用工具,以及将相同函数应用于容器中每个元素的函数等。

seed(val)

设置DGL的随机种子。

save_graphs(filename, g_list[, labels, formats])

将图形及其标签(可选)保存到文件。

load_graphs(filename[, idx_list])

Load graphs and optionally their labels from file saved by save_graphs().

apply_each(data, fn, *args, **kwargs)

对容器中的每个元素应用一个函数。

use_libxsmm(flag)

设置DGL在运行时是否使用libxsmm。

is_libxsmm_enabled()

获取是否打开了use_libxsmm标志。