dgl.broadcast_nodes
- dgl.broadcast_nodes(graph, graph_feat, *, ntype=None)[source]
生成一个节点特征,其值等于图级别的特征
graph_feat
。此操作类似于
numpy.repeat
(或torch.repeat_interleave
)。它常用于通过一个全局向量来规范化节点特征。例如,将图中所有节点特征规范化到范围 \([0~1)\)>>> g = dgl.batch([...]) # batch multiple graphs >>> g.ndata['h'] = ... # some node features >>> h_sum = dgl.broadcast_nodes(g, dgl.sum_nodes(g, 'h')) >>> g.ndata['h'] /= h_sum # normalize by summation
- 参数:
- 返回值:
节点特征张量,形状为 \((N, *)\),其中 \(N\) 是节点数量。
- 返回类型:
Tensor
示例
>>> import dgl >>> import torch as th
创建两个
DGLGraph
对象并初始化其节点特征。>>> g1 = dgl.graph(([0], [1])) # Graph 1 >>> g2 = dgl.graph(([0, 1], [1, 2])) # Graph 2 >>> bg = dgl.batch([g1, g2]) >>> feat = th.rand(2, 5) >>> feat tensor([[0.4325, 0.7710, 0.5541, 0.0544, 0.9368], [0.2721, 0.4629, 0.7269, 0.0724, 0.1014]])
将特征广播到批处理图中的所有节点,feat[i] 会广播到批次中第 i 个样本的节点。
>>> dgl.broadcast_nodes(bg, feat) tensor([[0.4325, 0.7710, 0.5541, 0.0544, 0.9368], [0.4325, 0.7710, 0.5541, 0.0544, 0.9368], [0.2721, 0.4629, 0.7269, 0.0724, 0.1014], [0.2721, 0.4629, 0.7269, 0.0724, 0.1014], [0.2721, 0.4629, 0.7269, 0.0724, 0.1014]])
将特征广播到单个图中的所有节点(要广播的特征张量形状应为 \((1, *)\))。
>>> feat0 = th.unsqueeze(feat[0], 0) >>> dgl.broadcast_nodes(g1, feat0) tensor([[0.4325, 0.7710, 0.5541, 0.0544, 0.9368], [0.4325, 0.7710, 0.5541, 0.0544, 0.9368]])
另请参阅