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

  • 抖音怎么创建国庆头像(怎样建抖音)

    抖音怎么创建国庆头像(怎样建抖音)

  • 腾讯会议电脑版怎么开启摄像头(腾讯会议电脑版怎么关闭声音)

    腾讯会议电脑版怎么开启摄像头(腾讯会议电脑版怎么关闭声音)

  • 交换机属于osi的哪一层(交换机在osi模型中属于哪一层)

    交换机属于osi的哪一层(交换机在osi模型中属于哪一层)

  • 苹果11照片怎么涂鸦(苹果11照片怎么导入电脑)

    苹果11照片怎么涂鸦(苹果11照片怎么导入电脑)

  • airpods跳电怎么解决(airpods跳电怎么恢复)

    airpods跳电怎么解决(airpods跳电怎么恢复)

  • 微信去哪儿怎么取消免密支付(去哪儿开通了微信免密怎么关闭)

    微信去哪儿怎么取消免密支付(去哪儿开通了微信免密怎么关闭)

  • 开发者选项没有网络adb(开发者选项没有模拟位置应用程序)

    开发者选项没有网络adb(开发者选项没有模拟位置应用程序)

  • qq怎么免密码登录(qq免密码登陆)

    qq怎么免密码登录(qq免密码登陆)

  • 只读存储器有哪些(只读存储器有哪几种)

    只读存储器有哪些(只读存储器有哪几种)

  • se什么时候上市的(荣耀60se什么时候上市)

    se什么时候上市的(荣耀60se什么时候上市)

  • 手机monster模式什么意思(手机monster模式有什么用)

    手机monster模式什么意思(手机monster模式有什么用)

  • 微信语音为什么没有声音(微信语音为什么不响铃)

    微信语音为什么没有声音(微信语音为什么不响铃)

  • 雅达电子是苹果原装吗(雅达电子是苹果的吗)

    雅达电子是苹果原装吗(雅达电子是苹果的吗)

  • 抖音消息怎么一键已读(抖音消息怎么一会显示已读一会显示已送达)

    抖音消息怎么一键已读(抖音消息怎么一会显示已读一会显示已送达)

  • w10蓝牙开关不见了(w10蓝牙开关没了)

    w10蓝牙开关不见了(w10蓝牙开关没了)

  • 分辨率跟显示器有关系吗(分辨率跟显示器关系大吗)

    分辨率跟显示器有关系吗(分辨率跟显示器关系大吗)

  • 数据处理的中心环节是什么(数据处理的中心任务是)

    数据处理的中心环节是什么(数据处理的中心任务是)

  • nova6耳机孔在哪里(nova6 5g耳机孔在哪)

    nova6耳机孔在哪里(nova6 5g耳机孔在哪)

  • 恢复聊天记录没有故障维修怎么恢复(恢复聊天记录没有电脑怎么办)

    恢复聊天记录没有故障维修怎么恢复(恢复聊天记录没有电脑怎么办)

  • ps钢笔选区怎么反选(ps钢笔选区怎么取消)

    ps钢笔选区怎么反选(ps钢笔选区怎么取消)

  • vivos1双引擎闪充在哪(vivos1双引擎闪充怎么开启)

    vivos1双引擎闪充在哪(vivos1双引擎闪充怎么开启)

  • 拼多多怎么拼单买东西(拼多多怎么拼单成团)

    拼多多怎么拼单买东西(拼多多怎么拼单成团)

  • ios13优化电池充电要打开吗(苹果13优化充电直接充满)

    ios13优化电池充电要打开吗(苹果13优化充电直接充满)

  • 快剪辑如何加图片(快剪辑如何加图片文字)

    快剪辑如何加图片(快剪辑如何加图片文字)

  • 苹果11多少内存(苹果11多少内存运行)

    苹果11多少内存(苹果11多少内存运行)

  • kafka支持的特性(kafka 特性)

    kafka支持的特性(kafka 特性)

  • 微软计划进一步加速 Win11 的推送工作:因用户反馈很积极(微软的机会)

    微软计划进一步加速 Win11 的推送工作:因用户反馈很积极(微软的机会)

  • 一般纳税人商品混凝土税率
  • 汽车购置税怎么在手机上缴费
  • 公司食堂辅助账怎么记账
  • 个税申报与社保申报一定是一致的么
  • 员工外出办事报备制度
  • 城镇土地使用税的征税范围有哪些
  • 总账和总分类账的区别图片
  • 资产负债表的期初余额是年初余额吗
  • 做实验用的东西哪里可以买到
  • 税务1236600短信
  • 新注册公司实收资本为0
  • 财产性收入是非劳动性收入吗
  • 个体工商户需要每个月报税吗
  • 公司新装宽带怎么做账?
  • 预提返利的会计处理
  • 公司之间转让股权,两家股东一样
  • 制造型企业采购
  • 房地产开发企业会计科目
  • 企业法人不发工资合法吗
  • 为什么负债不等于亏损
  • 公司拨付工会经费怎么算的
  • 研发费用加计扣除最新政策2023
  • 以前固定资产入账折旧怎么提
  • 收入未实现成本怎么进
  • 收入冲减费用
  • 亏损企业能否享受失业金
  • 软件技术开发是什么
  • 公司注销 缴税
  • 当月支付的费用需要计提吗
  • 代理买卖证券款是经纪业务费用吗
  • 公积金补缴需要去柜台吗
  • 物流中的代收货款是什么意思
  • php的序列化操作生成的哪种格式
  • 深度学习中的注意力机制模型及代码实现(SE Attention、CBAM Attention)
  • 卡比托丽娜·瓦西里耶娃
  • 企业购进的商品是什么
  • vue数据表
  • 购买样品入库的账务处理
  • 工程类什么情况下可以三方询价
  • vue style import
  • 职工福利费的作用
  • 企业增资相关知识点
  • 白酒消费税最低计税价格核定范围包括
  • 租车协议要不要报税务机关备案?
  • 网络服务费怎么入账
  • 未认证未抵扣的进项税
  • 转销无法收回的应收账款会计分录
  • 预收账款借贷方向增减
  • 个税手续费返还奖励财务人员的文件
  • 如何设置固定资产的部门对应这就
  • 企业流动负债比率多少算正常
  • win10 rs5
  • win10系统预览版
  • centos7如何扩展根分区空间
  • win10手机版下载官方中文版
  • ubuntu20.10桌面
  • mac打印预览快捷键是什么
  • weather.exe - weather 进程是什么文件
  • 通过防火墙可以保证窃听到的信息毫无价值
  • mac怎么连续播放视频
  • centos7.0安装网卡驱动
  • mac新版系统
  • unix2dos命令
  • ms-dos 6.2批处理文件高级指南
  • 深入分析的成语
  • 实现一个完整的主要任务
  • TextWatcher实现一键清空EditText
  • unity struct
  • 怎么用jquery
  • 填了专项附加扣除但没有进行综合年度汇算
  • 安徽农金如何查询开户行
  • 中国烟草一年税收占全国总收入
  • 关于地税代收工会经费工作实施办法
  • 甘肃国税电子税务局
  • 电信追缴欠费的工作方案有哪些
  • 什么是双创服务平台
  • 保税工厂和非保税工厂的区别
  • 汽车契税和购置税一样吗
  • 开票盘是什么意思
  • 山西省国家税务总局山西省电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设