消息函数copy_e和copy_u用法
- copy_e
- 语法格式
- 例子
- copy_u
- 语法格式
- 例子
copy_e
语法格式
dgl.function.copy_e(e, out)
参数:
- e (str):边的特征字段,指定用于计算消息的边特征。
- out (str):输出的消息字段,指定存储消息的地方。
这个函数的作用是从边的特征字段 e 中复制数据,并将其传递到输出消息字段 out 中。简单来说,就是将指定的边特征复制到消息中,供后续的节点更新使用。
例子
构建的图如下
代码如下:
import dgl
import torch
import dgl.function as fn# 创建图
g = dgl.graph(([0, 1, 2], [1, 2, 0])) # 定义图的边
g.edata['e_feat'] = torch.tensor([2000, 3000, 4000]) # 给边赋予特征
g.ndata['n_feat'] = torch.tensor([20, 21, 22]) # 给节点赋予特征# 使用 apply_edges 和 fn.copy_e 处理边特征
# apply_edges 用来将边特征复制到消息 'm' 中
g.apply_edges(fn.copy_e('e_feat', 'm'))print(f'这是边特征e_feat信息\n{g.edata["e_feat"]}')print(f'这是赋值后的边特征m信息\n{g.edata["m"]}')
结果如下:
copy_u
语法格式
dgl.function.copy_u(u, out)
参数:
- u (str): 源节点的特征字段名称,表示从源节点复制的特征。
- out (str): 输出的消息字段名称,表示消息将被存储在这个字段中。
函数的作用是从源节点的指定特征字段(u)复制数据到输出消息字段(out)
例子
构建的图如下
代码如下:
import dgl
import torch
import dgl.function as fn# 创建图
g = dgl.graph(([0, 1, 2], [1, 2, 0])) # 定义图的边
g.edata['e_feat'] = torch.tensor([2000, 3000, 4000], dtype=torch.float32) # 给边赋予特征
g.ndata['n_feat'] = torch.tensor([20, 21, 22], dtype=torch.float32) # 给节点赋予特征print(f'这是原来的边信息\n{g.edata}')# 使用 apply_edges 和 dgl.function.copy_u
# apply_edges 用来将源节点特征复制到边消息 'm' 中
g.apply_edges(fn.copy_u('n_feat', 'm'))print(f'这是更新后的边信息\n{g.edata}')
代码过程如下:
举个例子,对于边0 → 1,将源节点0的 n_feat=20信息复制给该边,并用消息 m保存。
代码结果如下: