位置: 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) 法(控制系统动力学)

  • 红米无线耳机左边不响(红米无线耳机左耳连不上)

    红米无线耳机左边不响(红米无线耳机左耳连不上)

  • 没有连接wifi怎么登录路由器(没有连接wifi怎么查看ip地址)

    没有连接wifi怎么登录路由器(没有连接wifi怎么查看ip地址)

  • 哈罗单车还不了车怎么办(哈罗单车还不了车怎么办客服电话)

    哈罗单车还不了车怎么办(哈罗单车还不了车怎么办客服电话)

  • 微信拍视频抖动怎么解决(微信视频聊天抖动)

    微信拍视频抖动怎么解决(微信视频聊天抖动)

  • pci与pci-e的区别(pci-e接口图片)

    pci与pci-e的区别(pci-e接口图片)

  • 钉钉拉黑后发信息什么状态(钉钉拉黑发信息对方能看到)

    钉钉拉黑后发信息什么状态(钉钉拉黑发信息对方能看到)

  • word文档怎么让字竖着居中(word文档怎么让文字竖排)

    word文档怎么让字竖着居中(word文档怎么让文字竖排)

  • 小米9pro5g是真5g吗(小米9pro支持5g)

    小米9pro5g是真5g吗(小米9pro支持5g)

  • 红米手机恢复出厂设置后怎么还原数据(红米手机恢复出厂设置卡在MIUI界面)

    红米手机恢复出厂设置后怎么还原数据(红米手机恢复出厂设置卡在MIUI界面)

  • 手机qq怎么不显示等级(手机qq怎么不显示新邮件了)

    手机qq怎么不显示等级(手机qq怎么不显示新邮件了)

  • 抖音播放量上不去怎么回事(抖音增加播放量的软件)

    抖音播放量上不去怎么回事(抖音增加播放量的软件)

  • word默认视图方式(word中默认的视图方式)

    word默认视图方式(word中默认的视图方式)

  • 苹果xr关机充电不显示电量(苹果xr关机充电时候显示屏是什么样的)

    苹果xr关机充电不显示电量(苹果xr关机充电时候显示屏是什么样的)

  • 苹果11promax怎么显示电量(苹果11promax怎么样 优点和缺点)

    苹果11promax怎么显示电量(苹果11promax怎么样 优点和缺点)

  • dcs系统用plc吗(dcs能实现plc的全部功能吗)

    dcs系统用plc吗(dcs能实现plc的全部功能吗)

  • vivox21防误触模式在哪里(vivo防误触模式在哪里x21i)

    vivox21防误触模式在哪里(vivo防误触模式在哪里x21i)

  • 苹果手机设置24小时制(苹果手机设置24小时怎么设置)

    苹果手机设置24小时制(苹果手机设置24小时怎么设置)

  • 荣耀10青春版能不能开空调(荣耀10青春版能卖多少钱)

    荣耀10青春版能不能开空调(荣耀10青春版能卖多少钱)

  • 吸顶ap怎么使用(吸顶ap设置方法)

    吸顶ap怎么使用(吸顶ap设置方法)

  • 抖音ai换脸是什么软件(抖音ai换脸是什么音乐)

    抖音ai换脸是什么软件(抖音ai换脸是什么音乐)

  • qq下载天天快报取消不了(qq下载天天快报app)

    qq下载天天快报取消不了(qq下载天天快报app)

  • 抖音直播怎么绑定不了手机号(抖音直播怎么绑定子账号)

    抖音直播怎么绑定不了手机号(抖音直播怎么绑定子账号)

  • 手机连接车载蓝牙没声音(手机连接车载蓝牙没声音是怎么回事)

    手机连接车载蓝牙没声音(手机连接车载蓝牙没声音是怎么回事)

  • uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

    uniapp实现app检查更新与升级-uni-upgrade-center详解(uniapp登陆检查)

  • 计入职工福利费的有哪些
  • 其他综合收益影响递延所得税负债吗
  • 油费可以抵扣进项税额
  • 缴注册印花税怎么做账
  • 生产成本里面的工资
  • 季度所得税申报表营业收入怎么填
  • 金税三期报税软件
  • 前期差错更正会引起所有者权益总额变动吗
  • 提供劳务收取现金会计分录
  • 单位日常发的钱都有哪些
  • 个税手续费返还计入哪个科目
  • 税务局的网站以后有这些变化是你不知道的!
  • 小规模纳税人 行业
  • 在建工程暂估入库的账务处理
  • 5000元可以买什么东西
  • 房屋产权无偿赠与合同范本
  • 转出以前年度成本怎么做账
  • win 11 无法安装
  • 怎样将u盘制作成电脑系统启动盘?
  • 房屋租赁收入确认条件新准则
  • PHP:mb_ereg_search_init()的用法_mbstring函数
  • flash player用不了怎么办
  • 酒店的啤酒
  • php字符串定义的三种方式
  • 债务重组账务处理会计分录
  • codewriter怎么运行
  • 会计准则对企业行为的影响分析论文
  • php与ajax交互
  • 北京猿创源科技有限公司
  • php生成证书图片
  • .size()
  • 商贸企业发生退税的原因
  • 磁盘命令符
  • 银行存款利息收入会计分录怎么写
  • 企业所得税退税申请理由怎么写
  • 没有取得发票就把车卖了违法吗
  • 预提财务费用
  • 增值税普通发票几个点
  • 附加税减免计入什么科目
  • 甲方向乙方支付
  • 开发票价格能否比实际金额高?
  • 给客户送礼计入成本吗
  • 总账与总账之间的核对
  • 销售退回怎么办
  • 基建期罚款支出账务处理
  • 2、开办费用计入哪个账户?
  • 市场开发费用会计分录
  • 股权转让会计账务处理方法
  • 员工报销签字流程
  • 百旺开发票清单
  • 民间非盈利组织使用什么会计准则
  • 在胖东来买到过期的食品
  • 预收账款转收入的条件
  • 有形资产有哪些科目
  • 应收账款周转率计算公式
  • 企业公司制改建的有关规定
  • mysql中增删改查语句
  • Windows Server 2016技术预览版第四版系统截图曝光 编号10565
  • 苹果os X El capitan无法更新了吗
  • windowsserver2008r2密码重置
  • sun solaris 8何启用telnet ftp 功能
  • 用指定用户名访问网络
  • 如何将win7系统装进移动硬盘
  • ie11forwindows10
  • 惠普笔记本的BIOS键
  • Win8.1 32位和64位有什么区别 Win8.1 32位和64区别详细介绍
  • jQuery+PHP实现可编辑表格字段内容并实时保存
  • shell脚本基础教学
  • 脚本被删除
  • 用vue做项目加入购物车是怎么做到的
  • [置顶]游戏名:chivalry2
  • 判断页面是关闭还是开启
  • jquery页面
  • jquery动态设置css
  • 酒类包装物押金的消费税处理规定
  • 定额发票是什么票据类型
  • 税控发票开票软件(金税盘版)打不开?
  • 期间费用如何分摊到成本中
  • 怎么注册山东省采购网
  • 企业所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设