dgl.readout_edges

dgl.readout_edges(graph, feat, weight=None, *, op='sum', etype=None)[source]

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

该函数通常用作一批图的读出函数,以生成图级别的表示。因此,结果张量的形状取决于输入图的批量大小。给定一个批量大小为\(B\)的图,以及特征大小为\(D\),结果形状将为\((B, D)\),其中每一行是每个图的聚合边特征。

Parameters:
  • graph (DGLGraph.) – The input graph.

  • feat (str) – 边缘特征名称。

  • weight (str, optional) – 边的权重特征名称。如果为None,则不进行加权, 否则,使用字段feat对每个边的特征进行加权。 用于求和。权重特征的形状必须与特征张量进行逐元素乘法兼容。

  • op (str, optional) – 读取操作符。可以是‘sum’, ‘max’, ‘min’, ‘mean’。

  • etype (str(str, str, str), 可选) –

    边的类型名称。允许的类型名称格式为:

    • (str, str, str) 用于源节点类型、边类型和目标节点类型。

    • 或者一个 str 边类型名称,如果该名称可以唯一标识图中的三元组格式。

    如果图中只有一种类型的边,则可以省略。

Returns:

结果张量。

Return type:

张量

示例

>>> import dgl
>>> import torch as th

Create two DGLGraph objects and initialize their edge features.

>>> g1 = dgl.graph(([0, 1], [1, 0]))              # Graph 1
>>> g1.edata['h'] = th.tensor([1., 2.])
>>> g2 = dgl.graph(([0, 1], [1, 2]))              # Graph 2
>>> g2.edata['h'] = th.tensor([2., 3.])

对一个图求和:

>>> dgl.readout_edges(g1, 'h')
tensor([3.])  # 1 + 2

在批处理图上求和:

>>> bg = dgl.batch([g1, g2])
>>> dgl.readout_edges(bg, 'h')
tensor([3., 5.])  # [1 + 2, 2 + 3]

加权和:

>>> bg.edata['w'] = th.tensor([.1, .2, .1, .5])
>>> dgl.readout_edges(bg, 'h', 'w')
tensor([.5, 1.7])

最大读数:

>>> dgl.readout_edges(bg, 'w', op='max')
tensor([2., 3.])

另请参阅

readout_nodes