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

  • 支付宝红包怎么退回给对方 (支付宝红包怎么领)

    支付宝红包怎么退回给对方 (支付宝红包怎么领)

  • 苹果12如何快速打开健康码(苹果12如何快速截屏)

    苹果12如何快速打开健康码(苹果12如何快速截屏)

  • 小米行为标注的用处(小米行为标注有什么用)

    小米行为标注的用处(小米行为标注有什么用)

  • 企业微信邀请通知是什么意思啊(企业微信邀请通知在哪里看)

    企业微信邀请通知是什么意思啊(企业微信邀请通知在哪里看)

  • 如何在Excel表格中添加对角线(如何在excel表格中加斜杠线)

    如何在Excel表格中添加对角线(如何在excel表格中加斜杠线)

  • 手机屏幕摔了有彩色斑(手机屏幕摔了有裂痕怎么办)

    手机屏幕摔了有彩色斑(手机屏幕摔了有裂痕怎么办)

  • iphone标记为丢失还能用吗(iphone标记为丢失等待中是什么意思)

    iphone标记为丢失还能用吗(iphone标记为丢失等待中是什么意思)

  • 唱吧被拉黑还有访客记录吗(唱吧被拉黑还有足迹)

    唱吧被拉黑还有访客记录吗(唱吧被拉黑还有足迹)

  • 3400g核显相当于什么(3400g核显相当于什么cpu)

    3400g核显相当于什么(3400g核显相当于什么cpu)

  • 苹果手机拉黑对方电话提示音是什么(苹果手机拉黑对方短信在哪看)

    苹果手机拉黑对方电话提示音是什么(苹果手机拉黑对方短信在哪看)

  • 苹果手机总是耳机模式没有声音怎么办(苹果手机总是耳机弹窗)

    苹果手机总是耳机模式没有声音怎么办(苹果手机总是耳机弹窗)

  • 计算机机器语言是用什么编码形式表示的(计算机机器语言名词解释)

    计算机机器语言是用什么编码形式表示的(计算机机器语言名词解释)

  • 为什么一进快手就闪退(为什么一进快手屏幕就变暗)

    为什么一进快手就闪退(为什么一进快手屏幕就变暗)

  • 聊天记录被迁移知道吗(怎么知道自己手机聊天记录被迁移)

    聊天记录被迁移知道吗(怎么知道自己手机聊天记录被迁移)

  • 如何成为lv2淘宝达人(如何成为lv2淘宝卖家)

    如何成为lv2淘宝达人(如何成为lv2淘宝卖家)

  • 百度地图如何去掉文字(百度地图如何去掉图标)

    百度地图如何去掉文字(百度地图如何去掉图标)

  • airpods二代第一次充电需要多久(airpods二代第一次连接步骤)

    airpods二代第一次充电需要多久(airpods二代第一次连接步骤)

  • 小米有品和小米的关系(小米有品和小米是一家吗)

    小米有品和小米的关系(小米有品和小米是一家吗)

  • 小米运动蓝牙耳机青春版怎么连接(小米运动蓝牙耳机mini)

    小米运动蓝牙耳机青春版怎么连接(小米运动蓝牙耳机mini)

  • 光驱位装固态硬盘(光驱位装固态硬盘无法识联想电脑怎么进入)

    光驱位装固态硬盘(光驱位装固态硬盘无法识联想电脑怎么进入)

  • 如何开通搜狐视频会员

    如何开通搜狐视频会员

  • 系统中总是多了一个软驱盘在BIOS中如何关闭软驱(系统太多怎么办)

    系统中总是多了一个软驱盘在BIOS中如何关闭软驱(系统太多怎么办)

  • Waterfalls at the source of the Mundo River, Sierra de Riopar, Albacete, Spain (© Westend61/Getty Images)

    Waterfalls at the source of the Mundo River, Sierra de Riopar, Albacete, Spain (© Westend61/Getty Images)

  • 怎样在网上申报营业执照年检
  • 印花税权利许可证照免税吗
  • 公司缴税怎么计算的
  • 种植农作物补贴
  • 主营业务成本的数据从哪里来的
  • 专用发票压线了可以拒收吗
  • 资产负债表总账科目有哪些
  • 财产保险合同印花税谁交
  • 固定资产可以计入实收资本吗
  • 销售免税的有机食品
  • 出让固定资产怎样计算增值税
  • 建筑企业临时工工资申报个税
  • 补发以前年度工资如何计税
  • 开出转账支票怎么入账
  • 个体工商户怎么注册
  • 劳务报酬代扣代缴个人所得税怎么做账
  • 工业用地厂房要交契税吗
  • 促销服务费能抵增值税吗
  • 营改增前的工程款现在怎么开票
  • 公司让员工发红包
  • 工程项目产生的沙石怎么处理
  • 应收款项核销的原因
  • 主营业务收入平均增长率计算公式近两年
  • 经营性资产和非经济资产
  • 如何申请税务发票
  • 公司购买的财产保险服务可以抵扣进项吗
  • 固定资产要办理什么手续
  • php技巧
  • 广告公司发生的费用要计入主营业务成本吗
  • 医保养老保险怎么查
  • win10电脑设备管理器在哪
  • 跨年的定额发票可以用吗
  • 贷款的资产减值怎么处理
  • 一叶兰的养殖方法和注意事项有哪些
  • 业务招待费用列支范围
  • 鬓角头发剃光了多久能长好
  • php实现的浏览器有哪些
  • opencv模板匹配原理
  • 房地产企业季度所得税预缴扣除附加税吗
  • 会计科目借贷方向图表
  • 什么情况下应该辞职
  • 只有进项发票,没有销项可以吗
  • 外贸企业代理出口退税给谁
  • 招待费进项转出填表二哪里
  • 预提成本应该如何结转
  • 新入职员工什么时候发工资
  • 交加盟费送赠品可以吗
  • 原始凭证收集
  • 企业清算未分配利润怎么交税
  • 存货跌价准备如何影响利润
  • 捆绑销售如何做会计处理合适?
  • 残保金缴纳计算方法2021
  • 增值税发票丢失罚款多少
  • 个人所得税如果不补税会怎么样
  • 现金日记账的登记规范及要求
  • 新公司的注册
  • 一般纳税人原材料的入账价值怎么算
  • u盘装机大师手机下载电脑版
  • freebsd怎么安装软件
  • VirtualBox安装64位系统报错的处理方法
  • 此电脑右键
  • win7开始菜单没有启动文件夹
  • 安装win7系统后一直正在启动
  • 简述js和jquery的关系
  • unity自带的代码编辑器
  • js 函数执行顺序
  • nodejs搭建本地服务器运行html
  • node.js中的http.response.getHeader方法使用说明
  • pythonista pygame
  • node socket hang up
  • python的应用程序
  • python dask
  • 北京地税电话咨询
  • 成都市武侯区税务局官网
  • 天津地税自助办税终端
  • 山东税务社保缴纳进入小程序
  • 控件未安装或控件版本过低
  • 购买税控盘怎么抵扣
  • 税务局窗口人员工作内容
  • 薰衣草商业价值
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设