【DGL系列】DGLGraph.out_edges简介

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~


目录

函数说明

用法示例

[示例 1: 获取所有边的源节点和目标节点](#示例 1: 获取所有边的源节点和目标节点)

[示例 2: 获取特定节点的出边](#示例 2: 获取特定节点的出边)

[示例 3: 获取所有边的边ID](#示例 3: 获取所有边的边ID)

[示例 4: 获取所有信息(源节点、目标节点和边ID)](#示例 4: 获取所有信息(源节点、目标节点和边ID))

[示例 5: 对于有多种边缘类型的图形,需要在查询中指定边的类型](#示例 5: 对于有多种边缘类型的图形,需要在查询中指定边的类型)

[示例 6:对于无向图,则边是双向的](#示例 6:对于无向图,则边是双向的)


dgl.DGLGraph.out_edges --- DGL 2.3 documentation

函数说明

dgl.DGLGraph.out_edges 是 DGL(Deep Graph Library)中的一个方法,用于获取图中所有边的源节点和目标节点。这个方法可以用于返回整个图的边,也可以通过传入指定的节点来获取从这些节点出发的边。

python 复制代码
DGLGraph.out_edges(u=ALL, etype=None, form='uv')

参数

  • u(节点ID):

    • 可以是 单个节点ID(整数)。
    • 可以是 节点ID的张量(Int Tensor),每个元素是一个节点ID。张量的设备类型和ID数据类型必须与图的相同。
    • 可以是 可迭代的节点ID列表(iterable[int]),每个元素是一个节点ID。
  • form(字符串,可选):

    • 'eid': 返回1D张量,表示所有边的ID。
    • 'uv'(默认): 返回一个2元组(1D张量),分别表示所有边的源节点和目标节点。
    • 'all': 返回一个3元组(1D张量),分别表示所有边的源节点、目标节点和边ID。
  • etype(字符串或(字符串, 字符串, 字符串),可选):

    • 边的类型名称。格式可以是 (源节点类型, 边类型, 目标节点类型)。
    • 或者是一个唯一标识三元组格式的字符串类型名称。如果图中只有一种类型的边,可以省略。

返回值

  • 返回所有指定类型节点的出边。返回形式取决于 form 参数的值。
    • 'eid': 返回一个1D张量,表示所有边的ID。
    • 'uv': 返回一个2元组(1D张量),分别表示所有边的源节点和目标节点。
    • 'all': 返回一个3元组(1D张量),分别表示所有边的源节点、目标节点和边ID。

用法示例

我们创建一个如图所示的简单的graph:

**示例 1:**获取所有边的源节点和目标节点

python 复制代码
import dgl
import torch

# 创建一个简单的图,包含4个节点和4条边
u = torch.tensor([0, 0, 1, 2])
v = torch.tensor([1, 2, 3, 3])
graph = dgl.graph((u, v))

# 获取所有边的源节点和目标节点
src, dst = graph.out_edges(graph.nodes())

print("源节点:", src)
print("目标节点:", dst)

# 源节点: tensor([0, 0, 1, 2])
# 目标节点: tensor([1, 2, 3, 3])

**示例 2:**获取特定节点的出边

python 复制代码
# 获取节点0和节点1的出边
nodes = torch.tensor([0, 1])
src, dst = graph.out_edges(nodes)

print("源节点:", src)
print("目标节点:", dst)

# 源节点: tensor([0, 0, 1])
# 目标节点: tensor([1, 2, 3])

示例 3: 获取所有边的边ID

python 复制代码
# 获取所有边的边ID
edge_ids = graph.out_edges(graph.nodes(), form='eid')

print("边ID:", edge_ids)

# 边ID: tensor([0, 1, 2, 3])

**示例 4:**获取所有信息(源节点、目标节点和边ID)

python 复制代码
# 获取所有边的源节点、目标节点和边ID
src, dst, eid = graph.out_edges(graph.nodes(), form='all')

print("源节点:", src)
print("目标节点:", dst)
print("边ID:", eid)

# 源节点: tensor([0, 0, 1, 2])
# 目标节点: tensor([1, 2, 3, 3])
# 边ID: tensor([0, 1, 2, 3])

**示例 5:**对于有多种边缘类型的图形,需要在查询中指定边的类型

python 复制代码
hg = dgl.heterograph({
    ('user', 'follows', 'user'): (torch.tensor([0, 1]), torch.tensor([1, 2])),
    ('user', 'plays', 'game'): (torch.tensor([3, 4]), torch.tensor([5, 6]))
})
hg.out_edges(torch.tensor([1, 2]), etype='follows')

# (tensor([1]), tensor([2]))

**示例 6:**对于无向图,则边是双向的

注意:在dgl的图中,所有边都是有向的,如果要创建无向图,需要创建双向边。

python 复制代码
import dgl
import torch

# 创建一个无向图,包含4个节点和4条边
u = torch.tensor([0, 0, 1, 2])
v = torch.tensor([1, 2, 3, 3])

# 创建双向边以模拟无向图
u_bi = torch.cat([u, v])
v_bi = torch.cat([v, u])

graph = dgl.graph((u_bi, v_bi))
# 简化图
graph = dgl.to_simple(graph)

# 获取节点的出边
src, dst = graph.out_edges([1, 3])

print("源节点:", src)
print("目标节点:", dst)

# 源节点: tensor([1, 1, 3, 3])
# 目标节点: tensor([3, 0, 1, 2])
相关推荐
好家伙VCC7 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
前端玖耀里8 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people8 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源8 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手8 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手9 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_949146539 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn9 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结10 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒10 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr