位置: IT常识 - 正文

【PyG】与networkx的图转换(network python)

发布时间:2024-01-14
【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) 法(控制系统动力学)

  • 半年奖个人所得税怎么算的
  • 资源税的计税依据为应税产品的开采量
  • 材料报废是否可以税前扣除
  • 汇算退回的所得税分录
  • 食堂没有发票怎么做账
  • 化肥发票怎么开
  • 2019年研发费用加计扣除标准
  • 遗失的发票可以补开吗
  • 固定资产可以计入实收资本吗
  • 工会费可以个税抵扣吗
  • 印花税的征税对象包括
  • 营改增后建筑公司账务处理
  • 进口设备在海关处保存2年出售时 计算税怎么算
  • 税金及附加怎么计提
  • 房屋租赁违约金是月租金的30%还是年租金
  • 负债月末正常余额是什么
  • 准予扣除的工会经费怎么算
  • 代扣代缴个人所得税手续费返还 增值税
  • 无分包声明
  • 住房公积金如何在手机上提取
  • 企业所得税成本确认原则
  • 先开票后预缴能跨年吗
  • 营改增之后的税率
  • 有税收完税证明还需要发票吗
  • 新办企业国税报税时间
  • 个税纳税期数如何规定的 怎么选择
  • 往来科目明细表
  • 水利工程建设费用组成
  • 普通股资本成本的计算
  • 工厂材料成本改善报告范文
  • 非营利组织属于企业吗
  • win10怎么接收手机热点
  • 非正常损失为什么不赔偿
  • 刚毕业的学生可以买学生票吗
  • vmware10虚拟机安装
  • php 静态变量
  • 增值税进项发票不够抵扣怎么办
  • react组件如何设置dom
  • 公司的财产保险包括哪些
  • php增删改查mysqli实例
  • 成本费用损失的区别和联系
  • php注释有几种?如何表示?
  • 以前年度损益调整是什么意思
  • 利润表上期数指的是什么
  • 企业购房怎么贷款
  • 工业企业发生的各项费用
  • 税务机关代开的增值税发票要加盖发票专用章吗?
  • 医院交什么保险
  • 未收到货款但发货怎么办
  • 普通发票的后续怎么开
  • 公司户和个人户交强险一样吗
  • 金蝶kis云专业版使用教程
  • 法律是如何规定家用家具折旧
  • 抵扣联明细没认证如何申报
  • 质保期内出现质量问题,一直没有修复
  • 固定资产内部抵扣增值税
  • 全面推开营改增政策指引
  • 赠送样品视同销售增值税该怎么做账务处理呢?
  • 收取履约保证金的作用
  • 资产减值损失是费用吗
  • 资产减值损失怎么计提
  • 非营利医疗机构是什么单位
  • MySQL 5.7双主同步部分表的实现过程详解
  • mac如何取消自动开机
  • shell 日期运算
  • win10系统回收站在哪
  • cfg是什么格式,怎么打开
  • 硬盘分区win7怎么扩充c盘
  • win10怎么关闭讲述人模式
  • 事件处理的三个要素
  • mongoose怎么用
  • opengl入门视频教程
  • 牛叉叉旗舰店没有了改名成啥了
  • 进程 python
  • w10cmd命令高级命令
  • 深入理解中国式现代化
  • js获取tbody
  • 计算天数的excel公式
  • for语句中的++i
  • 残疾人就业税收优惠政策2021
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号