1.4 从外部来源创建图形
从外部源构建DGLGraph
的选项包括:
从外部Python库转换图形和稀疏矩阵(NetworkX和SciPy)。
从磁盘加载图表。
本节不涵盖通过从其他图形转换生成图形的函数。有关它们的概述,请参阅API参考手册。
从外部库创建图表
以下代码片段是从SciPy稀疏矩阵和NetworkX图创建图的一个示例。
>>> import dgl
>>> import torch as th
>>> import scipy.sparse as sp
>>> spmat = sp.rand(100, 100, density=0.05) # 5% nonzero entries
>>> dgl.from_scipy(spmat) # from SciPy
Graph(num_nodes=100, num_edges=500,
ndata_schemes={}
edata_schemes={})
>>> import networkx as nx
>>> nx_g = nx.path_graph(5) # a chain 0-1-2-3-4
>>> dgl.from_networkx(nx_g) # from networkx
Graph(num_nodes=5, num_edges=8,
ndata_schemes={}
edata_schemes={})
请注意,当从nx.path_graph(5)构造时,生成的DGLGraph
有8条边而不是4条。这是因为nx.path_graph(5)构造了一个无向的NetworkX图networkx.Graph
,而DGLGraph
始终是有向的。在将无向的NetworkX图转换为DGLGraph
时,DGL内部将无向边转换为两条有向边。使用有向的NetworkX图networkx.DiGraph
可以避免这种行为。
>>> nxg = nx.DiGraph([(2, 1), (1, 2), (2, 3), (0, 0)])
>>> dgl.from_networkx(nxg)
Graph(num_nodes=4, num_edges=4,
ndata_schemes={}
edata_schemes={})
注意
DGL 内部将 SciPy 矩阵和 NetworkX 图转换为张量以构建图。 因此,这些构建方法不适用于性能关键部分。
查看API:dgl.from_scipy()
, dgl.from_networkx()
.
从磁盘加载图表
有许多数据格式用于存储图,不可能列举所有选项。因此,本节仅提供一些关于某些常见格式的一般指导。
逗号分隔值 (CSV)
一种非常常见的格式是CSV,它以表格格式存储节点、边及其特征:
年龄, 标题 |
---|
43, 1 |
23, 3 |
… |
源节点, 目标节点, 权重 |
---|
0, 1, 0.4 |
0, 3, 0.9 |
… |
有一些已知的Python库(例如pandas)可以将这种类型的数据加载到Python对象中(例如,numpy.ndarray
),然后可以用来构建一个DGLGraph。如果后端框架还提供了从磁盘保存/加载张量的工具(例如,torch.save()
,torch.load()
),可以遵循相同的原则来构建图。
另请参阅:从边对CSV加载空手道俱乐部网络的教程。
JSON/GML 格式
虽然速度不是特别快,但NetworkX提供了许多工具来解析 各种数据格式 这间接允许DGL从这些来源创建图。
DGL 二进制格式
DGL 提供了 API 来保存和加载以二进制格式存储在磁盘上的图。除了图结构外,这些 API 还处理特征数据和图级标签数据。DGL 还支持直接将图检查点保存到 S3 或 HDFS。参考手册提供了更多关于用法的详细信息。
查看API:dgl.save_graphs()
, dgl.load_graphs()
.