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.Tensor 或 Dict[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]))}