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

  • 怎样当个网赚达人?(怎么样可以做网络赚钱)

    怎样当个网赚达人?(怎么样可以做网络赚钱)

  • 图灵机与计算机的区别(图灵机与计算机哪个好)

    图灵机与计算机的区别(图灵机与计算机哪个好)

  • 荣耀30有nfc功能吗(荣耀畅玩30有nfc功能吗)

    荣耀30有nfc功能吗(荣耀畅玩30有nfc功能吗)

  • 苹果8p为什么屏幕一会亮一会暗(苹果8P为什么屏幕会变暗)

    苹果8p为什么屏幕一会亮一会暗(苹果8P为什么屏幕会变暗)

  • 11pro可以改高通基带吗(11pro能改5g吗)

    11pro可以改高通基带吗(11pro能改5g吗)

  • 手机坐公交怎么刷卡(手机坐公交怎么刷)

    手机坐公交怎么刷卡(手机坐公交怎么刷)

  • 地址错了已发货可以改地址吗(地址错了已发货改地址后有钱吗)

    地址错了已发货可以改地址吗(地址错了已发货改地址后有钱吗)

  • micc9meitu edition是小米什么型号

    micc9meitu edition是小米什么型号

  • 移动4g卡怎么升5g(移动4g如何升级5 g)

    移动4g卡怎么升5g(移动4g如何升级5 g)

  • 苹果换第三方电池还有快充吗(苹果换第三方电池好还是换电芯好)

    苹果换第三方电池还有快充吗(苹果换第三方电池好还是换电芯好)

  • 苹果6s升级后开不了机怎么办(苹果6s更新以后打不开了)

    苹果6s升级后开不了机怎么办(苹果6s更新以后打不开了)

  • byte是什么数据类型(byte数据类型)

    byte是什么数据类型(byte数据类型)

  • 哔哩哔哩ul怎么升级(哔哩哔哩ul怎么看)

    哔哩哔哩ul怎么升级(哔哩哔哩ul怎么看)

  • 手机刷机需要多久(手机刷机需要多少元)

    手机刷机需要多久(手机刷机需要多少元)

  • 优活手环怎么调中文(优活手环怎么调时间格式)

    优活手环怎么调中文(优活手环怎么调时间格式)

  • oppo手机安装包在哪里(oppo手机安装包与系统不兼容)

    oppo手机安装包在哪里(oppo手机安装包与系统不兼容)

  • 炫龙笔记本怎么进入bios设置界面(炫龙笔记本怎么进入bios设置u盘启动)

    炫龙笔记本怎么进入bios设置界面(炫龙笔记本怎么进入bios设置u盘启动)

  • 蓄电池内阻一般为多少(蓄电池内阻标准规程)

    蓄电池内阻一般为多少(蓄电池内阻标准规程)

  • 畅享9s返回键在哪(畅享9s返回键在哪里设置)

    畅享9s返回键在哪(畅享9s返回键在哪里设置)

  • 苹果xs双卡双待吗(苹果xsmax怎么设置双卡双待)

    苹果xs双卡双待吗(苹果xsmax怎么设置双卡双待)

  • 电脑主板上的电池有什么用(电脑主板上的电池是什么型号)

    电脑主板上的电池有什么用(电脑主板上的电池是什么型号)

  • 右移运算符(python右移运算符)

    右移运算符(python右移运算符)

  • macOS big sur屏幕使用时间怎么添加到小组件?(mac系统屏幕)

    macOS big sur屏幕使用时间怎么添加到小组件?(mac系统屏幕)

  • vue+js+海康web开发包接入海康威视摄像头(海康威视web开发接口文档)

    vue+js+海康web开发包接入海康威视摄像头(海康威视web开发接口文档)

  • 什么是增值税扣缴义务
  • 水利建设基金计费方式
  • 房产证,契税
  • 金税三期是什么意思
  • 个人独资企业需要交什么税
  • 库存暂估入账
  • 预算资产负债表
  • 两年前发票怎么红冲
  • 出差飞机票报销标准
  • 小规模开专票的条件
  • 税务开专票遇到四舍五入
  • 以前月度费用当期怎么入账合适?
  • 压覆矿产赔偿标准法律依据
  • 为什么要抵消损益
  • 雇主责任险是否属于财产保险
  • 个人所得税期末为负数审计调整
  • 个税手续费返还计入哪个科目
  • 蜜枣税收分类编码
  • 文化事业建设费税率
  • 合并报表的少数股东权益分录
  • 外籍人员探亲签证
  • 企业抵押贷款手续办理流程
  • 金蝶迷你版不能期末结账怎么办
  • 微软输入法中文输入卡顿
  • win7为什么这么多人用
  • 进销存单据
  • linux系统备份整个硬盘的命令
  • linux安装xen
  • 营改增后哪些费用可以抵扣
  • 开展党建系列活动
  • 斯塔尔德
  • 总分类账户原材料
  • 股东无偿投入的土地需要摊销吗
  • node js 安装
  • 简述时期指标和时点指标的特点
  • vue3和ts
  • umount命令详解
  • 个人所得税汇算清缴时间
  • 研发费用怎么体现
  • 特殊银行账户上限
  • 将织梦dedecms转换到wordpress
  • sqlserver2008数据库定时备份
  • 材料短缺计入成本吗
  • 分公司转款总公司总公司怎样会计处理
  • sql server 2008使用说明
  • 短期借款的其它账户
  • 进项大于销项的会计分录怎么做?
  • 银行对账单电脑上怎么导出
  • 外贸企业出口货物会计分录
  • 运输费属于生产成本还是制造费用
  • 合并报表抵消分录的基本原理
  • 购买固定资产进项税现金流量
  • 事业单位的股东是谁
  • 未开票收入如何申报增值税,下个月怎么操作
  • 老板出差带礼物给员工的说说
  • 往年附加税退税怎么做
  • 固定资产清理后怎么做账
  • 增值税科目设置成多栏式还是三栏式好
  • 使用SSIS创建同步数据库数据任务的方法
  • win8启动文件夹在哪里
  • centos nis
  • winxp能玩啥大型游戏
  • centos新加硬盘
  • ghost操作指南
  • ContentProvider之通过ContentResolver获取图像、视频、音频举例
  • bat批处理命令大全
  • cocos2djs教程
  • jq获取单选框的值
  • unity jsonutility
  • 处理判断字符串是否相等
  • 噩梦act2
  • nodejs实战教程
  • jquery validate表单校验长度
  • android 桌面开发
  • Python的SQLalchemy模块连接与操作MySQL的基础示例
  • 广东省国家税务总局稽查局局长
  • 房产契税退税在哪里办理
  • 开发区税务局咨询电话
  • 合肥报税网站
  • 湖南地方税务局网上办税大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设