我们知道,邻接矩阵通常是稀疏矩阵,而COO格式(Coordinate Format)是稀疏矩阵的一种存储方式,本文将简要介绍如何将无权无向图的邻接矩阵转化为COO格式。

顾名思义,COO格式即坐标格式,我们只需考虑邻接矩阵中不为零的元素的坐标。对于无权无向图,其邻接矩阵是对称阵并且元素非 000 即 111,考虑下面的邻接矩阵:

[0101101001001000]\begin{bmatrix} 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ \end{bmatrix} ⎣⎡​0101​1010​0100​1000​⎦⎤​

先考虑下三角部分,不为零的元素的坐标为 (1,0),(2,1),(3,0)(1,0), (2,1),(3,0)(1,0),(2,1),(3,0),因此所有不为零的元素的坐标为 (1,0),(0,1),(2,1),(1,2),(3,0),(0,3)(1,0),(0,1),(2,1),(1,2),(3,0),(0,3)(1,0),(0,1),(2,1),(1,2),(3,0),(0,3)。将这六个坐标转置成列向量并沿列方向拼在一起即可得到此邻接矩阵的COO格式:

[102130011203]\begin{bmatrix} 1 &0 & 2&1&3&0\\ 0&1&1&2&0&3 \\ \end{bmatrix} [10​01​21​12​30​03​]

容易看出,对于无权无向图,设它有 num_edges 条边,则邻接矩阵的COO格式的形状为 (2, num_edges * 2)

⚠️ 在 PyG 中,一条无向边被视为两条有向边的组合,COO格式中的 num_edges 指的是有向边的个数,因此这种情况下无论是有向图还是无向图,形状均可统一为 (2, num_edges)

numpy 实现:

import numpy as npdef adj2coo(adj):"""Convert the adjacency matrix to its COO formatArgs:adj (ndarray): Adjacency matrixReturns:ndarray: COO format"""return np.vstack(adj.nonzero())

例如:

a = np.array([[0, 1, 0, 1], [1, 0, 1, 0], [0, 1, 0, 0], [1, 0, 0, 0]])
print(adj2coo(a))
# [[0 0 1 1 2 3]
#  [1 3 0 2 1 0]]

邻接矩阵的COO格式相关推荐

  1. PyG|邻接矩阵转为coo_matrix格式

    在使用PyG框架的时候,PyG要求输入的是 edge_index 格式,而不是我们所使用的邻接矩阵格式,即N x N. import scipy.sparse as sp import numpy a ...

  2. 稀疏矩阵的存储方法(DOK、LIL、COO、CSR, CRS)

    存储稀疏矩阵 经常用二维数组来存储矩阵. 用数组的ai,ja_{i,j}ai,j​可以用索引值iii和jjj访问.通常,iii是 行索引,从上往下编号,jjj是列索引,从左到右进行编号.对于m×nm ...

  3. Python 将关系对数据转换为图数据 / 邻接矩阵

    1. 前言 在深度学习任务,例如推荐系统中,将关系转换为图表示,即邻接矩阵是常用的操作. 通常的做法是先将关系对数据转换为图数据,然后生成该图的邻接矩阵,再存储为稀疏矩阵.但这种方法不适用于大型矩阵的 ...

  4. pytorch dense to coo, edge_index to coo

    pytorch 的dense matrix如何转成coo的sparse tensor? 给定边的下标,如何转成coo格式的稀疏矩阵? 稀疏矩阵如何转成dense的矩阵? 本文全部是pytorch的操作 ...

  5. python中稀疏矩阵的常用表示COO LIL CSR CSC【上篇】

    前言 sklearn调用独热编码函数encoder.fit_transform()返回的是scipy.sparse._csr.csr_matrix类型. torch的tensor也是一种matrix, ...

  6. 第十六课.Pytorch-geometric入门(一)

    目录 PyG安装 图结构基础 基准数据集 Mini-Batches 构建GCN PyG安装 Pytorch-geometric即PyG,是一个基于pytorch的图神经网络框架.其官方链接为:PyG ...

  7. PaperNotes(15)-图神经网络、PyG极简版入门笔记

    图神经网络概况 1.GNN,GCN,GE的区别 2.图卷积的通式--矩阵该如何作用 2.1实现1 2.2实现2 2.3实现3 3.PyTorch geometric 3.1 PyG内置数据集 3.1. ...

  8. 环境配置与PyG中图与图数据集的使用

    一.环境配置 因为没有GPU,我这里只安装了CPU版本 先安装pytorch pip install torch torchvision torchaudio 安装PyG pip install to ...

  9. 【GNN】task1-简单图论 Data类-PyG中图的表示及使用

    文章目录 学习心得: 第一部分:开篇 为什么要在图上进行深度学习? 问题的分类 将神经网络应用于图的挑战 参考资料 第二部分:环境配置 第三部分:简单图论 图结构数据 一.图的表示 先介绍几种图概念 ...

  10. 图神经网络 | (6) 图分类(SAGPool)实战

    近期买了一本图神经网络的入门书,最近几篇博客对书中的一些实战案例进行整理,具体的理论和原理部分可以自行查阅该书,该书购买链接:<深入浅出的图神经网络>. 该书配套代码 本节我们通过代码来实 ...

最新文章

  1. hadoop大数据平台架构之DKhadoop详解
  2. 【Python】Python时间序列之calendar模块
  3. mysql临时表的使用实例_MySQL中临时表的使用示例
  4. 幻读(phantom read)
  5. H.264学习(一)——帧和场的概念
  6. 左斜杠和右斜杠有什么区别_「斜杠云」SEO推广和SEO优化有什么区别?
  7. 1066 图像过滤 (15 分)
  8. matlab人民币识别,MATLAB-OCR 用MATLAB实现人民币纸币金额的识别与统计 - 下载 - 搜珍网...
  9. 美团面经-java开发
  10. PyCharm: Simplify chained comparison
  11. 路飞学城-Python开发集训-第2章
  12. 负载均衡技术沙龙2期圆满结束(现场图文、PPT)
  13. 2018第九届蓝桥杯C++省赛B组题目汇总
  14. PCI Express 16X和PCIE 2.0有什么区别?哪个更好?
  15. 火车头如何把标题加html标签,火车采集器怎么编辑标签 火车采集器标签编辑教程...
  16. dfs、bfs的终于弄明白了
  17. Go test 命令行参数
  18. 企业级运维——Mysql主从复制(异步、半同步、全同步)
  19. Android 的 Fragment 教程
  20. 07-整合阿里云oss用户认证就诊人CRUD平台统一管理用户

热门文章

  1. Word VBA:MathType公式与Latex公式切换
  2. 2021年长安杯电子数据取证比赛复盘完整版(wp)
  3. JAVA实现简易文本编辑器设计
  4. java smtp服务器,用Java实现SMTP服务器
  5. 51单片机毕业设计题目大全
  6. 机器学习算法——神经网络4(RBF神经网络)
  7. 在php中使用for、while、do-while循环实现从1加到100
  8. C语言程序设计飞机售票口,C语言课程设计报告飞机订票系统
  9. 三菱PLC自带FIFO操作指令编程应用
  10. 计算机组成原理 第二版 课后答案 (唐朔飞) 1~8章