位置: IT常识 - 正文

【PyG】与networkx的图转换(network python)

编辑:rootadmin
【PyG】与networkx的图转换

推荐整理分享【PyG】与networkx的图转换(network python),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pyramid network,networks python,python的networks包案例,networks python,net和python,pygame与python的关系,pyramid network,networks python,内容如对您有帮助,希望把文章链接给更多的朋友!

在使用图神经网络的过程中,往往需要使用到相关的 GNN 库,而在这些 GNN 库中,一款比较高效热门的图神经网络库是 PyTorch 中的 PyG 库。PyG 提供了很多经典的图神经网络模型和图数据集,通常在使用 PyG 框架来构建和训练图模型时,需要事先选择合适的图数据结构来构造图,PyG 提供的选择包括 Data、HeteroData、TemporalData。而在实验的过程中,可能需要使用到 networkx 提供的一些功能来实现与图相关的操作,这时图数据需要在两个框架提供的图结构之间进行转换,基于此,本文主要针对转换操作进行了整理和总结。

一、数据准备

本文以简单图为例,同构图与异构图(无向图)如下所示:

1、构建 PyG 同构图

import torchfrom torch_geometric.data import Datadata = Data()# 初始化节点特征data.x = torch.tensor([[-1], [0], [1]], dtype=torch.float)# 初始化边索引data.edge_index = torch.tensor([[0, 1, 1, 2], [1, 0, 2, 1]], dtype=torch.long)

2、构建 PyG 异构图

import torchfrom torch_geometric.data import HeteroDatadata = HeteroData() # 初始化结点特征 # [num_papers, num_features_paper] data['paper'].x = torch.tensor([[0, 1, 2]], dtype=torch.float) # [num_authors, num_features_author] data['author'].x = torch.tensor([[-1], [1]], dtype=torch.float) # 初始化边索引 # [2, num_edges_writes] data['author', 'writes', 'paper'].edge_index = torch.tensor([[0, 1], [0, 0]], dtype=torch.long)data['paper', 'belongs', 'author'].edge_index = torch.tensor([[0, 0], [0, 1]], dtype=torch.long)

3、构建 networkx 同构图

import networkx as nx# 创建无向图G = nx.Graph()# 两种添加节点的方式 add_node 和 add_nodes_fromG.add_nodes_from([0, 1, 2])# 两种添加连边的方式,add_edge 和 add_edges_fromG.add_edges_from([[0, 1], [1, 2]])【PyG】与networkx的图转换(network python)

4、构建 networkx 异构图

import networkx as nx# 创建无向图 G = nx.Graph() # 为节点添加 type 属性(属性名可自定义)来区分节点类型 G.add_nodes_from([0, 2], type='author') G.add_nodes_from([1], type='paper') # 为连边添加 type 属性(属性名可自定义)来区分连边类型 G.add_edges_from([[0, 1], [1, 2]], type='writes') # 获取节点 & 连边类型 node_labels = nx.get_node_attributes(G, 'type') edge_labels = nx.get_edge_attributes(G, 'type')二、同构图转换

1、PyG 转 networkx

(1)利用 to_networkx方法直接转换

from torch_geometric.utils.convert import to_networkxG = to_networkx(data)优点:简单,高效缺点:无法处理规模较大的图(内存不足)

(2)以添加节点与连边的方式转换

import numpy as npG = nx.Graph()# 使用 add_nodes_from 批处理的效率比 add_node 高G.add_nodes_from([i for i in range(data.x.shape[0])])# 使用 add_edges_from 批处理的效率比 add_edge 高edges = np.array(data.edge_index.T, dtype=int)G.add_edges_from(edges)优点:适用于规模较大的图缺点:较为复杂

2、networkx 转 PyG

import torchimport numpy as np# 创建节点特征矩阵x = torch.ones((G.number_of_nodes(),1), dtype=torch.float)# 获取图G邻接矩阵的稀疏表示adj = nx.to_scipy_sparse_array(G).tocoo()# 获取非零元素行索引row = torch.from_numpy(adj.row.astype(np.int64)).to(torch.long)# 获取非零元素列索引col = torch.from_numpy(adj.col.astype(np.int64)).to(torch.long)# 将行和列进行拼接,shape变为[2, num_edges], 包含两个列表,第一个是row, 第二个是coledge_index = torch.stack([row, col], dim=0)data = Data(x=x, edge_index=edge_index)三、异构图转换

1、PyG 转 networkx

(1)利用 to_networkx方法直接转换

from torch_geometric.utils.convert import to_networkxdata = data.to_homogeneous() G = to_networkx(data)优点:简单,高效缺点:无法处理规模较大的图(内存不足)

(2)以添加节点与连边的方式转换

import numpy as npG = nx.Graph() # 需要为节点重新排序 node_num = 0 nt_start = {} for nt in data.node_types: nt_start[nt] = node_num node_num += data[nt].x.shape[0] # 使用 add_nodes_from 批处理的效率比 add_node 高 for nt in data.node_types: G.add_nodes_from([nt_start[nt] + i for i in range(data[nt].x.shape[0])], node_type=nt) # 使用 add_edges_from 批处理的效率比 add_edge 高 for et in data.edge_types: edges = np.array(data[et].edge_index.T, dtype=int) G.add_edges_from([[nt_start[et[0]] + e[0], nt_start[et[2]] + e[0]] for e in edges], edge_type=et[1])优点:适用于规模较大的图缺点:较为复杂

2、networkx 转 PyG

利用 networkx 框架将异构图转 PyG 图结构的情况一般不常见,通常是在 PyG 中创建了图,但为了绘制图结构,才需要转换为 networkx 框架下的图,再利用 networkx 提供的接口进行绘制。

本文链接地址:https://www.jiuchutong.com/zhishi/295205.html 转载请保留说明!

上一篇:Python+Selenium自动化测试详细教程(python自动化selenium)

下一篇:【控制】动力学建模简介 --> 牛顿-欧拉 (Newton-Euler) 法和拉格朗日 (Lagrange) 法(控制系统动力学)

  • 苹果13pro防水吗(苹果手机13防水吗)

    苹果13pro防水吗(苹果手机13防水吗)

  • oppo怎么打开双声道(OPPO怎么打开双系统)

    oppo怎么打开双声道(OPPO怎么打开双系统)

  • 荣耀X30i支持内存卡吗(荣耀x30i支持nfc吗)

    荣耀X30i支持内存卡吗(荣耀x30i支持nfc吗)

  • 华为v30有没有红外线功能呢(华为v30有红外线吗)

    华为v30有没有红外线功能呢(华为v30有红外线吗)

  • 华为nova5系列有几款(华为nova5系列有什么区别)

    华为nova5系列有几款(华为nova5系列有什么区别)

  • 快手播放量突然上不去(快手播放量突然降低太多,怎么了?)

    快手播放量突然上不去(快手播放量突然降低太多,怎么了?)

  • 支付宝解除亲情号对方知道吗(支付宝解除亲情卡钱退回来吗)

    支付宝解除亲情号对方知道吗(支付宝解除亲情卡钱退回来吗)

  • 非好友看朋友圈有记录吗(微信如何禁止非好友看朋友圈)

    非好友看朋友圈有记录吗(微信如何禁止非好友看朋友圈)

  • 红米手机短信闪退(红米短信闪光灯怎么设置)

    红米手机短信闪退(红米短信闪光灯怎么设置)

  • ipad屏幕中间有个圆圈(ipad屏幕中间有个圆圈,触控无效)

    ipad屏幕中间有个圆圈(ipad屏幕中间有个圆圈,触控无效)

  • 手环长期没用充不进电(手环长时间没用充不上电怎么回事)

    手环长期没用充不进电(手环长时间没用充不上电怎么回事)

  • 钉钉作业提交了为什么还显示去提交(钉钉作业提交了两次怎么删除)

    钉钉作业提交了为什么还显示去提交(钉钉作业提交了两次怎么删除)

  • lctrl是哪个键(lctrl在哪)

    lctrl是哪个键(lctrl在哪)

  • 微信语音笔记怎么做(微信语音笔记怎么制作图例)

    微信语音笔记怎么做(微信语音笔记怎么制作图例)

  • 第六代ipad是2018款吗(第六代ipad是哪一款)

    第六代ipad是2018款吗(第六代ipad是哪一款)

  • iphone10是不是防水(苹果10的防水等级)

    iphone10是不是防水(苹果10的防水等级)

  • word文档如何单页显示(word文档如何单独修改页眉)

    word文档如何单页显示(word文档如何单独修改页眉)

  • 怎样通知栏才有qq图标(怎么弄通知栏)

    怎样通知栏才有qq图标(怎么弄通知栏)

  • 手机录屏咋录内部声音(手机录屏咋录内录声音)

    手机录屏咋录内部声音(手机录屏咋录内录声音)

  • vivo手机怎么永久不锁屏(vivo手机怎么永不灭屏)

    vivo手机怎么永久不锁屏(vivo手机怎么永不灭屏)

  • vx怎么建群(vx怎么建群聊)

    vx怎么建群(vx怎么建群聊)

  • oppo识屏怎么关闭(oppoa9怎么关闭识屏)

    oppo识屏怎么关闭(oppoa9怎么关闭识屏)

  • 天猫精灵怎么连接电视机(天猫精灵怎么连Qq音乐)

    天猫精灵怎么连接电视机(天猫精灵怎么连Qq音乐)

  • 小米手环3怎么重启(小米手环3怎么绑定手机)

    小米手环3怎么重启(小米手环3怎么绑定手机)

  • safari下载的文件在哪(safari下载的文件怎么打开)

    safari下载的文件在哪(safari下载的文件怎么打开)

  • 电脑文件删除如何找回(电脑文件删除如何找到)

    电脑文件删除如何找回(电脑文件删除如何找到)

  • 小米MINI路由器的硬盘的详细教程(小米mini路由器mesh)

    小米MINI路由器的硬盘的详细教程(小米mini路由器mesh)

  • 增值税专用发票几个点
  • 消费税计算时的进项税额
  • 税控盘是干什么用的
  • 其他负债是流动负债还是非流动负债
  • 公司账户转账给个人怎么合理避税?
  • 实收资本在报表中怎么看
  • 违约金并用
  • 公司员工社保怎么办理的
  • 营业成本利润率是指
  • 承包费收入如何做账
  • 上年的应收帐款在本年度如何录入?
  • 发票丢失可以冲销吗
  • 材料采购计入什么会计科
  • 应交所得税的计算例题
  • 个人所得税变动率计算公式为多少
  • 剪头开发票
  • 安保服务费税率几个点怎么算
  • 劳务派遣企业的规上企业认定标准
  • 案例讨论如何进行
  • 当期损益包括哪些费用
  • 电子银行承兑如何背书给别人
  • 新股东入股怎么写记账凭证摘要
  • 住房公积金利息怎么算的
  • 没有金税盘怎么勾选发票
  • 0元收购股份
  • 财产转移数据缴费怎么交
  • 资产负债表要填年初余额吗
  • 小规模纳税人如何交增值税
  • 一般纳税人建筑服务税率是多少
  • 开机进入睡眠模式按哪个键解除
  • 应收账款的账务处理方式是什么
  • 苹果14出来13会下架吗
  • 销售免税商品可以抵扣进项税吗
  • 累计折旧额怎么计算公式
  • 增加办税人员需要带什么材料
  • laravel with查询指定字段
  • php缓存原理
  • html中a标签的作用
  • 固定资产汽车抵扣新政策
  • PHP面向对象程序设计
  • python怎么安装lxml库
  • 前端手撕代码
  • 什么是技术服务工程师
  • 应交增值税为负数怎么处理
  • 利息收入的纳税调整
  • vue–router
  • 不抵扣勾选的发票在哪里查看
  • 小规模纳税人可以抵扣进项税吗
  • 公司个税如何申报流程
  • 营业执照变更法人需要本人去吗
  • 开具发票涉及到哪些会计科目?
  • 贸易公司如何结转销售成本
  • 运输费用如何做账
  • 冲减以前年度营业外收入分录
  • 租赁合同的印花税的计税依据
  • 哪些可以做进项税
  • 主营业务成本和主营业务收入的关系
  • 暂估的费用次年调增怎么做会计分录
  • 新手会计做账怎么做账
  • 盈亏平衡点怎么计算公式
  • sql 修改表的字段名称
  • mysql中一个普通ERROR 1135 (HY000)错误引发的血案
  • Windows2008 对决 Windows Vista优势
  • centos下载与安装
  • 电脑图片打印不出来怎么办
  • 图片如何添加到word文档
  • 在linux中使用什么命令可以执行shell脚本
  • 微信小程序图片加载不出来
  • python元数据
  • javascript的描述
  • jQuery+JSON实现AJAX二级联动实例分析
  • 适配是什么
  • 封装好的中药能带上飞机吗
  • js闭包的用处
  • 全面解析白羊座o型血女
  • android 5.1 WIFI图标上的感叹号及其解决办法
  • 浙江省增值税勾选平台
  • 中国税务主旨是什么?
  • 关于保安公司词语
  • 房地产的土地增值税怎么交
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设