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

  • 发帖推广需要注意的哪些重要细节(发帖推广需要注意什么)

    发帖推广需要注意的哪些重要细节(发帖推广需要注意什么)

  • 华为Mate X2前置摄像的功能有哪些

    华为Mate X2前置摄像的功能有哪些

  • 华为手机智能助手怎么关(华为手机智能助手怎么关闭)

    华为手机智能助手怎么关(华为手机智能助手怎么关闭)

  • 怎么查华为手机什么时候买的(怎么查华为手机生产日期查询)

    怎么查华为手机什么时候买的(怎么查华为手机生产日期查询)

  • 华为手机怎样查看手机内存(华为手机怎样查找对方的手机位置)

    华为手机怎样查看手机内存(华为手机怎样查找对方的手机位置)

  • 同一个id怎么取消共享通讯录(同一个id怎么取消同步下载软件)

    同一个id怎么取消共享通讯录(同一个id怎么取消同步下载软件)

  • 华为flaal10是什么型号(华为flaal10什么型号手机)

    华为flaal10是什么型号(华为flaal10什么型号手机)

  • 不小心把软件卸载了怎么恢复(不小心把软件卸载了怎么恢复OPPO)

    不小心把软件卸载了怎么恢复(不小心把软件卸载了怎么恢复OPPO)

  • qq怎么添加附近的人(qq怎么添加附近的人功能)

    qq怎么添加附近的人(qq怎么添加附近的人功能)

  • 快充头必须配快充数据线吗(快充头必须配快充线才能快充吗)

    快充头必须配快充数据线吗(快充头必须配快充线才能快充吗)

  • 华为gt2能不能上微信(华为gt2可以上网吗)

    华为gt2能不能上微信(华为gt2可以上网吗)

  • mg4j2cha是什么版本(mg4j2za/a是什么版本)

    mg4j2cha是什么版本(mg4j2za/a是什么版本)

  • 微信朋友圈可以编辑修改吗(微信朋友圈可以关闭吗)

    微信朋友圈可以编辑修改吗(微信朋友圈可以关闭吗)

  • 拼多多sku能改吗(拼多多sku可以改吗)

    拼多多sku能改吗(拼多多sku可以改吗)

  • 乐视手机照片怎么免费恢复(乐视手机照片怎么导出)

    乐视手机照片怎么免费恢复(乐视手机照片怎么导出)

  • 美团账单交易记录怎么删除(美团交易账单能不能删除)

    美团账单交易记录怎么删除(美团交易账单能不能删除)

  • ldnaloo这是什么型号(loadina是什么意思)

    ldnaloo这是什么型号(loadina是什么意思)

  • 对方已经删除账号了什么意思(对方已经删除账号啥意思)

    对方已经删除账号了什么意思(对方已经删除账号啥意思)

  • 交管12123找回密码(交管12123找回密码身份信息不通过)

    交管12123找回密码(交管12123找回密码身份信息不通过)

  • xs可以双卡吗(ipone xs是否可以双卡)

    xs可以双卡吗(ipone xs是否可以双卡)

  • 掌上川电怎么用不了了(下载掌上川电免费下载)

    掌上川电怎么用不了了(下载掌上川电免费下载)

  • 能上网但微信连不上网(能上网但微信连不上)

    能上网但微信连不上网(能上网但微信连不上)

  • java实现电子发票中的发票税号等信息识别的几种可用方案(java实现电子发票)

    java实现电子发票中的发票税号等信息识别的几种可用方案(java实现电子发票)

  • 土地增值税常见问题及解答
  • 印花税什么时候开始计入税金及附加
  • 累计净值包含业务收入吗
  • 暂估材料收到发票后是更正还是红冲
  • 企业支付宝买东西
  • 劳务成本科目
  • 本月进项留抵会计分录
  • 行政单位其他收入包括哪些
  • 运输业务增值税
  • 怎么计提应交税费
  • 其他账簿印花税是否取消
  • 海关进口增值税如何入账
  • 老板垫付员工工资怎么写条子
  • 生产的产品不合格作废会计分录
  • 多扣社保个人部分怎么做分录
  • 自己承担所有
  • 装修公司在装修完后增加费用
  • 购进租赁设备分录
  • 稿酬所得税额
  • 增值税专用发票电子版
  • 怎么通过合并弥补亏损,使得利益最大化?
  • 企业残疾人保障金
  • 商品和服务税收编码怎么查
  • 业务员报销清单表
  • 无法访问移动网络怎么办
  • 企业利润分配的原则
  • 外贸企业出口货物
  • 投资收益科目的借贷方向
  • 公司员工私车公用协议要签吗
  • win10重装系统后网卡没了
  • 病毒dll文件
  • 资产减值损失的借贷方向
  • pc应用是什么意思
  • 一只草丛里的狐狸作文
  • 银行承兑汇票挂失手续费收费标准
  • 非货币性资产投资个人所得税
  • 信用减值损失属于损益类科目吗
  • 代扣增值税如何做账
  • 固定资产的使用寿命超过一个会计年度
  • 土地转让注意事项有哪些
  • react生命周期分为两类
  • 微信支付的开发公司
  • 职工慰问金账务处理流程
  • 个税申报系统操作指南
  • 工厂院里栽什么树好呢
  • cookie 会话
  • mongodb启动命令 linux
  • 原材料折价销售怎么算
  • 拯救你的方法
  • 增值税留抵税额是什么意思
  • 职工教育经费能开专票吗
  • 转账给个人账户
  • 为什么小规模纳税人少
  • 汇算清缴结束后发现有错账
  • 购置固定资产进项税处理的变迁
  • 抵扣进项税额必须用专用发票吗
  • mysql开发语言
  • linux命令i
  • win10周年纪念版
  • mac z
  • qbdagent2002.exe - qbdagent2002是什么进程 有什么用
  • 轻量级java开发工具
  • win10极限精简版 200m
  • linux的web服务器
  • javascript entries
  • node.js获取文件信息的方法是什么
  • ContentProvider之通过ContentResolver获取图像、视频、音频举例
  • linux中vi命令是什么意思
  • cocos-2dx
  • jquery 随机函数
  • css网页布局中注释是什么
  • nodejs开发博客
  • 深入学习习总书记系列讲话精神
  • jQuery EasyUI tree 使用拖拽时遇到的错误小结
  • unity3d基础操作
  • javascript tr
  • jquery弹窗弹出一个页面
  • wordpress开发文档
  • 陕西省医保缴费截止日期2024
  • 税率分几种 分别是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设