自学内容网 自学内容网

DGL之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保存。
代码结果如下:
在这里插入图片描述


原文地址:https://blog.csdn.net/m0_56878426/article/details/143589310

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!