Python无权点文件转化成邻接矩阵方式

作者:qq_42271164 时间:2021-04-19 02:14:29 

将无权点文件转化成邻接矩阵

目前点文件是两列Excel代码,在进行复杂网络运算时需要转化成邻接矩阵。

我在网上找了一个代码,稍微修改了下,亲测可以成功转化。

import csv
import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

f = open('D:/ii/R/C3000.csv')
#数据两列(id1,id2),每一行表示这两个节点之间存在边
data = [tuple(map(int, row)) for row in csv.reader(f)]#读取数据

n = max(max(id1, id2) for id1, id2 in data)
print(n)#最大节点数对应邻接矩阵的行列数
matrix = np.zeros((n,n))#生成n行n列的全0数组
for id1, id2 in data:
   matrix[id2-1][id1-1] = 1#遍历数据,将对应关系转化为1
   matrix[id1-1][id2-1] = 1 #邻接矩阵对角对称
print(matrix)
df = pd.DataFrame(matrix)
df.to_csv("D:/ii/R/Adjacency Matrix.csv")
#生成邻接矩阵并存储

转化成邻接矩阵后,python代码对于点的计算是从0开始的

邻接矩阵的COO格式

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

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

考虑下面的邻接矩阵:

Python无权点文件转化成邻接矩阵方式

先考虑下三角部分,不为零的元素的坐标为(1,0),(2,1),(3,0),因此所有不为零的元素的坐标为(1,0),(0,1),(2,1),(1,2),(3,0),(0,3)。

将这六个坐标转置成列向量并沿列方向拼在一起即可得到此邻接矩阵的COO格式:

Python无权点文件转化成邻接矩阵方式

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

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

numpy 实现:

import numpy as np

def adj2coo(adj):
   """Convert the adjacency matrix to its COO format

Args:
       adj (ndarray): Adjacency matrix

Returns:
       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]]

来源:https://blog.csdn.net/qq_42271164/article/details/124794876

标签:Python,无权点文件,邻接,矩阵
0
投稿

猜你喜欢

  • python 数据的清理行为实例详解

    2021-04-12 08:43:50
  • 用JS实现轮播图效果(二)

    2024-06-05 09:11:49
  • ASP用户登录验证代码

    2008-05-15 12:49:00
  • Mysql中复制详细解析

    2024-01-13 20:46:25
  • Python3实现对列表按元组指定列进行排序的方法分析

    2022-10-05 18:01:13
  • VTK与Python实现机械臂三维模型可视化详解

    2021-11-03 19:36:02
  • Git实现克隆历史的某个版本

    2023-03-24 01:39:54
  • Python脚本Selenium及页面Web元素定位详解

    2023-06-14 12:21:10
  • Python闭包执行时值的传递方式实例分析

    2021-09-22 14:43:50
  • Python日志处理模块logging用法解析

    2021-01-05 14:45:55
  • 删除pycharm鼠标右键快捷键打开项目的操作

    2022-06-01 22:08:31
  • mssql中获取指定日期所在月份的第一天的代码

    2011-09-30 11:23:57
  • javascript面向对象技术基础(二)

    2010-02-07 13:09:00
  • vue2/vue3路由权限管理的方法实例

    2024-05-29 22:28:54
  • 用PHP编写和读取XML的几种方式

    2023-11-18 22:30:27
  • CSS实现HTML元素透明的那些事

    2010-02-01 12:34:00
  • 跟老齐学Python之坑爹的字符编码

    2021-07-13 06:07:38
  • Python制作脚本帮女朋友抢购清空购物车

    2021-08-30 04:40:01
  • vue 监听是否切屏和开启小窗的实现过程

    2024-04-26 17:38:46
  • MySQL复合查询和内外连接的操作代码

    2024-01-18 15:56:22
  • asp之家 网络编程 m.aspxhome.com