dgl.create_block
- dgl.create_block(data_dict, num_src_nodes=None, num_dst_nodes=None, idtype=None, device=None, node_count_check=True)[source]
创建一个消息流图(MFG)作为
DGLBlock
对象。- Parameters:
data_dict (图数据) –
用于构建MFG的字典数据。键是以字符串三元组(src_type, edge_type, dst_type)的形式,指定源节点类型、边类型和目标节点类型。值是图数据,形式为\((U, V)\),其中\((U[i], V[i])\)形成ID为\(i\)的边。允许的图数据格式有:
(Tensor, Tensor)
: 每个张量必须是一个包含节点ID的一维张量。DGL称这种格式为“节点张量元组”。张量应具有相同的数据类型,必须是int32或int64。它们还应具有相同的设备上下文(见下文idtype
和device
的描述)。('coo', (Tensor, Tensor))
: 与(Tensor, Tensor)
相同。('csr', (Tensor, Tensor, Tensor))
: 这三个张量形成图的邻接矩阵的CSR表示。第一个是行索引指针。第二个是列索引。第三个是边ID,可以为空以表示从0开始的连续整数ID。('csc', (Tensor, Tensor, Tensor))
: 这三个张量形成图的邻接矩阵的CSC表示。第一个是列索引指针。第二个是行索引。第三个是边ID,可以为空以表示从0开始的连续整数ID。
张量可以用任何整数可迭代对象(如列表、元组、numpy.ndarray)替换。
如果你想创建一个具有单一源节点类型、单一目标节点类型和单一边类型的MFG,那么你可以直接传入图数据,而不需要将其包装为字典。
num_src_nodes (dict[str, int] or int, optional) –
每种源节点类型的节点数量,这是一个将节点类型 \(T\) 映射到 \(T\) 类型源节点数量的字典。
如果未为节点类型 \(T\) 提供,DGL 会找到 每个 源节点类型为 \(T\) 的图数据中出现的最大 ID,并将节点数量设置为 该 ID 加一。如果提供了该值且该值不大于某些源节点类型的最大 ID,DGL 将引发错误。默认情况下,DGL 会推断所有源节点类型的节点数量。
如果您想创建一个具有单一源节点类型、单一目标节点类型和单一边类型的 MFG,那么您可以传入一个整数来直接表示源节点的数量。
num_dst_nodes (dict[str, int] or int, optional) –
每个目标节点类型的节点数量,这是一个将节点类型 \(T\) 映射到 \(T\) 类型目标节点数量的字典。
如果未为节点类型 \(T\) 提供此参数,DGL 会找到目标节点类型为 \(T\) 的每个图数据中出现的最大 ID,并将节点数量设置为该 ID 加一。如果提供了此参数且其值不大于某些目标节点类型的最大 ID,DGL 将引发错误。默认情况下,DGL 会推断所有目标节点类型的节点数量。
如果你想创建一个具有单一目标节点类型、单一目标节点类型和单一边类型的 MFG,那么你可以直接传入一个整数来表示目标节点的数量。
idtype (int32 或 int64, 可选) – 用于存储结构相关图形信息(如节点和边ID)的数据类型。它应该是特定框架的数据类型对象(例如,
torch.int32
)。 如果为None
(默认),DGL会从data_dict
参数推断ID类型。device (设备上下文, 可选) – 返回图的设备,应为框架特定的设备对象 (例如,
torch.device
)。如果为None
(默认),DGL 使用data
参数的张量的设备。如果data
不是节点张量的元组,则 返回的图在 CPU 上。如果指定的device
与提供的张量的设备不同,它会先将给定的张量转换为指定的设备。node_count_check (bool, optional) – 当传递了num_src_nodes和num_dst_nodes时,是否应执行健全性检查以确保它们是有效的。
- Returns:
创建的MFG。
- Return type:
DGLBlock
注释
如果未提供
idtype
参数,则:在节点-张量格式的元组情况下,DGL使用给定ID张量的数据类型。
在序列格式的元组情况下,DGL 使用 int64。
一旦图被创建,你可以通过使用
dgl.DGLGraph.long()
或dgl.DGLGraph.int()
来更改数据类型。如果指定的
idtype
参数与提供的张量的数据类型不同,它会先将给定的张量转换为指定的数据类型。最有效的构建方法是提供一个节点张量的元组,而不指定
idtype
和device
。这是因为在这种情况下,返回的图与输入的节点张量共享存储。DGL 内部维护了图结构在不同稀疏格式下的多个副本,并根据调用的计算选择最有效的一个。如果在大图情况下内存使用成为问题,请使用
dgl.DGLGraph.formats()
来限制允许的格式。DGL 内部决定了一组相同节点类型和规范边类型的确定性顺序,这不一定遵循
data_dict
中的顺序。
示例
以下示例使用PyTorch后端。
>>> import dgl >>> block = dgl.create_block(([0, 1, 2], [1, 2, 3]), num_src_nodes=3, num_dst_nodes=4) >>> block Block(num_src_nodes=3, num_dst_nodes=4, num_edges=3)
>>> block = dgl.create_block({ ... ('A', 'AB', 'B'): ([1, 2, 3], [2, 1, 0]), ... ('B', 'BA', 'A'): ([2, 1], [2, 3])}, ... num_src_nodes={'A': 6, 'B': 5}, ... num_dst_nodes={'A': 4, 'B': 3}) >>> block Block(num_src_nodes={'A': 6, 'B': 5}, num_dst_nodes={'A': 4, 'B': 3}, num_edges={('A', 'AB', 'B'): 3, ('B', 'BA', 'A'): 2}, metagraph=[('A', 'B', 'AB'), ('B', 'A', 'BA')])
另请参阅