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

  • 荣耀平板v7pro支持指纹解锁吗(荣耀平板v7pro支持多屏协同吗)

    荣耀平板v7pro支持指纹解锁吗(荣耀平板v7pro支持多屏协同吗)

  • 如何在微信建群(如何在微信建群且发二微吗)

    如何在微信建群(如何在微信建群且发二微吗)

  • 荣耀20解锁方式(荣耀20解锁方式有几种)

    荣耀20解锁方式(荣耀20解锁方式有几种)

  • 高清语音通话收费吗(高清语音通话收费吗电信)

    高清语音通话收费吗(高清语音通话收费吗电信)

  • 网易云怎么下载音乐(网易云怎么下载歌曲)

    网易云怎么下载音乐(网易云怎么下载歌曲)

  • 华为最近删除照片在哪恢复(华为最近删除照片在哪)

    华为最近删除照片在哪恢复(华为最近删除照片在哪)

  • 华为手机语音播放失败什么原因(华为手机语音播报在哪里设置)

    华为手机语音播放失败什么原因(华为手机语音播报在哪里设置)

  • vivoz6怎么没有返回键(vivoz1怎么没有返回键)

    vivoz6怎么没有返回键(vivoz1怎么没有返回键)

  • 无线网上行线路没有激活什么意思(无线网上行线路没有激活是欠费了吗)

    无线网上行线路没有激活什么意思(无线网上行线路没有激活是欠费了吗)

  • 华为灭屏显示有必要开吗(华为手机灭屏幕显示)

    华为灭屏显示有必要开吗(华为手机灭屏幕显示)

  • 苹果11如何插双卡(苹果11如何插双卡手机)

    苹果11如何插双卡(苹果11如何插双卡手机)

  • 隐藏wifi后自己怎么连接手机(隐藏wifi后自己电脑怎么连)

    隐藏wifi后自己怎么连接手机(隐藏wifi后自己电脑怎么连)

  • iphone11怎么辨别国行(苹果11如何辨别)

    iphone11怎么辨别国行(苹果11如何辨别)

  • 三星td一lte什么版本(三星的lte)

    三星td一lte什么版本(三星的lte)

  • 密保手机和绑定手机有什么区别(密保手机和绑定手机区别)

    密保手机和绑定手机有什么区别(密保手机和绑定手机区别)

  • 探探暗恋短信怎么查看是谁(探探暗恋短信怎么查看是谁发的)

    探探暗恋短信怎么查看是谁(探探暗恋短信怎么查看是谁发的)

  • word文档为什么编辑不了(word文档为什么不能编辑)

    word文档为什么编辑不了(word文档为什么不能编辑)

  • 苹果耳机怎么连接(苹果耳机怎么连接安卓手机)

    苹果耳机怎么连接(苹果耳机怎么连接安卓手机)

  • 怎么退出淘宝人生官方群(怎么退出淘宝人生)

    怎么退出淘宝人生官方群(怎么退出淘宝人生)

  • 高德地图如何显示速度(高德地图如何显示海拔)

    高德地图如何显示速度(高德地图如何显示海拔)

  • 苹果黑夜模式在哪里(苹果黑夜模式在哪)

    苹果黑夜模式在哪里(苹果黑夜模式在哪)

  • 微信设置拒绝好友拉群(微信设置拒绝好友转账)

    微信设置拒绝好友拉群(微信设置拒绝好友转账)

  • 美团商家相册怎么弄的(美团商家相册怎么上传视频)

    美团商家相册怎么弄的(美团商家相册怎么上传视频)

  • linux怎么修改账户头像? linux修改登录用户头像的方法(Linux怎么修改账户名)

    linux怎么修改账户头像? linux修改登录用户头像的方法(Linux怎么修改账户名)

  • 公司注销后虚开还查吗
  • 普通发票税率1%要交税吗
  • 预缴增值税需要预缴附加税吗
  • 红冲以前年度收入成本的账务处理
  • 材料入库结转成本的会计分录怎么写
  • 主税零申报附加税怎样申报
  • 财务担保费计入什么科目
  • 从商业企业购进商品
  • 如何确定商品交易价格?
  • 固定资产被盗报警
  • 老板投资的钱怎么入账
  • 18年补交17年城建税会计分录
  • 企业员工无偿使用合法吗
  • 退休人员是否还继续享受社保
  • 不同项目之间进项税能否抵扣?
  • 国家认定的高新技术企业是什么意思
  • 种香菇会赔钱吗
  • 公司的差旅费
  • ping命令出现unreachable
  • 鸿蒙系统怎么快速充电
  • 普通发票丢了如何入账
  • 自创商誉可确认为商誉且在资产负债表中列报
  • json postman
  • 企业经费独立使用的原因
  • 人均劳效的意义
  • yolov5 output
  • 《设计模式》
  • tracet命令
  • 金融企业往来支出是一级科目吗
  • 未缴纳的出资款怎样清算
  • 上缴税金怎么算税额
  • day14-HTTP01
  • 其他应付款需要结转损益吗
  • 公司福利可以发现金吗
  • 合营企业和联营企业是关联方吗
  • 金税四期可以查到闭环开票信息吗
  • 暂估成本跨年后收到票可以直接附在暂估凭证
  • 房地产企业取得土地的契税如何记账
  • 企业所得税什么时候计提
  • 出口货物预收账款分录
  • 进口关税减免政策
  • 电费应收和实收怎么算
  • 辞退福利什么时候确认
  • 主营业务税金及附加借贷方向
  • 计提的利息汇算清缴时要调整吗
  • 更换公司新公章流程
  • 其他应收款的认定
  • 股票增发给谁
  • 工资油补也要交税吗
  • 主营业务利润率反映了企业的什么能力
  • MySQL5.7中 performance和sys schema中的监控参数解释(推荐)
  • mysql怎么修改用户名和密码
  • mysql jdbc
  • winxp搜索文件内容搜不出来
  • centos怎么样
  • FastDFS4和Ubuntu12安装及部署步骤
  • csinsmnt.exe进程的作用介绍 csinsmnt是什么进程
  • win11怎么关闭系统防火墙
  • win8.1内存占用过高
  • linux svn管理工具
  • Win7系统无法安装SQL2000
  • win8图片查看器无法打开图片内存不足
  • unsupportedclassversion
  • nodejs调用c++函数
  • 安全工具有哪些
  • unity smooth
  • 简述matlab中控制系统的数学描述类型
  • pyinstaller指定python2
  • python urljoin
  • python简单编码
  • android 保存密码
  • javascript基础教学
  • 后缀名为是什么意思
  • python怎么将列表转换成数字
  • 国家税务局福建省电子税务
  • 国家税务总局上海市电子税务局
  • 国家税务总局令16号公告
  • 土地流转需要什么材料
  • 竣工开始缴房产税吗
  • 广东可以去吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设