dgl.graphbolt.unique_and_compact_csc_formats

dgl.graphbolt.unique_and_compact_csc_formats(csc_formats: Tuple[Tensor, Tensor] | Dict[str, Tuple[Tensor, Tensor]], unique_dst_nodes: Tensor | Dict[str, Tensor])[source]

紧凑的csc格式并返回唯一的节点(按类型)。

Parameters:
  • csc_formats (Union[CSCFormatBase, Dict(str, CSCFormatBase)]) – 表示源-目标边的CSC格式。 - 如果 csc_formats 是 CSCFormatBase:表示图是同质的。此外,其中的 indptr 和 indice 应该是表示 csc 格式中源和目标对的 torch.tensor。并且其中的 ID 是同质 ID。 - 如果 csc_formats 是 Dict[str, CSCFormatBase]:键应该是边类型,值应该是 csc 格式的节点对。并且其中的 ID 是异质 ID。

  • unique_dst_nodes (torch.TensorDict[str, torch.Tensor]) – 节点对中所有目标节点的唯一节点。 - 如果 unique_dst_nodes 是一个张量:表示图是同质的。 - 如果 csc_formats 是一个字典:键是节点类型,值是相应的节点。内部的ID是异质ID。

Returns:

压缩的csc格式,其中节点ID被替换为映射的节点ID,以及唯一的节点(每种类型)。 “压缩的csc格式”表示输入节点对中的节点ID被替换为映射的节点ID,其中每种类型的节点被映射到一个从0到N的连续ID空间。

Return type:

元组[csc_formats, unique_nodes]

示例

>>> import dgl.graphbolt as gb
>>> N1 = torch.LongTensor([1, 2, 2])
>>> N2 = torch.LongTensor([5, 5, 6])
>>> unique_dst = {
...     "n1": torch.LongTensor([1, 2]),
...     "n2": torch.LongTensor([5, 6])}
>>> csc_formats = {
...     "n1:e1:n2": gb.CSCFormatBase(indptr=torch.tensor([0, 2, 3]),indices=N1),
...     "n2:e2:n1": gb.CSCFormatBase(indptr=torch.tensor([0, 1, 3]),indices=N2)}
>>> unique_nodes, compacted_csc_formats = gb.unique_and_compact_csc_formats(
...     csc_formats, unique_dst
... )
>>> print(unique_nodes)
{'n1': tensor([1, 2]), 'n2': tensor([5, 6])}
>>> print(compacted_csc_formats)
{"n1:e1:n2": CSCFormatBase(indptr=torch.tensor([0, 2, 3]),
                           indices=torch.tensor([0, 1, 1])),
 "n2:e2:n1": CSCFormatBase(indptr=torch.tensor([0, 1, 3]),
                           indices=torch.Longtensor([0, 0, 1]))}