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

目录
  • 将无权点文件转化成邻接矩阵
  • 邻接矩阵的COO格式
  • 总结

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

目前点文件是两列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,

考虑下面的邻接矩阵:

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

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

容易看出,对于无权无向图,设它有 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]]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python将邻接矩阵输出成图的实现

    利用networkx,numpy,matplotlib,将邻接矩阵输出为图形. 1,自身确定一个邻接矩阵,然后通过循环的方式添加变,然后输出图像 import networkx as nx import matplotlib.pyplot as plt import numpy as np G = nx.Graph() Matrix = np.array( [ [0, 1, 1, 1, 1, 1, 0, 0], # a [0, 0, 1, 0, 1, 0, 0, 0], # b [0, 0, 0

  • python如何进行矩阵运算

    python进行矩阵运算的方法: 1.矩阵相乘 >>>a1=mat([1,2]); >>>a2=mat([[1],[2]]); >>>a3=a1*a2 #1*2的矩阵乘以2*1的矩阵,得到1*1的矩阵 >>> a3 matrix([[5]]) 2.矩阵对应元素相乘 >>>a1=mat([1,1]); >>>a2=mat([2,2]); >>>a3=multiply(a1,a2) &

  • Python根据已知邻接矩阵绘制无向图操作示例

    本文实例讲述了Python根据已知邻接矩阵绘制无向图操作.分享给大家供大家参考,具体如下: 有六个点:[0,1,2,3,4,5,6],六个点之间的邻接矩阵如表格所示,根据邻接矩阵绘制出相对应的图 0 1 2 3 4 5 6 0 0 1 0 1 0 1 0 1 1 0 1 1 1 1 1 2 0 1 0 1 0 1 0 3 1 1 1 0 1 1 1 4 0 1 0 1 1 1 1 5 1 1 1 1 1 0 0 6 0 1 0 1 1 0 0 将点之间的联系构造成如下矩阵 N = [[0, 3,

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

    目录 将无权点文件转化成邻接矩阵 邻接矩阵的COO格式 总结 将无权点文件转化成邻接矩阵 目前点文件是两列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') #数据两列(

  • python将图片文件转换成base64编码的方法

    本文实例讲述了python将图片文件转换成base64编码的方法.分享给大家供大家参考.具体实现方法如下: import base64 f=open(r'c:\jb51.gif','rb') #二进制方式打开图文件 ls_f=base64.b64encode(f.read()) #读取文件内容,转换为base64编码 f.close() 调用方法如下: 复制代码 代码如下: <img src="R0lGODlh1wBOAPcAAAAAAP///7a4u+jq7bG1ucrN0N7g4tLU

  • 利用Python将图片批量转化成素描图的过程记录

    目录 前言 程序 Method 1 Method 2 完整代码 结果 总结 前言 正常图片转化成素描图片无非对图片像素的处理,矩阵变化而已.目前很多拍照修图App都有这一功能,核心代码不超30行.如下利用 Python 实现读取一张图片并将其转化成素描图片.至于批处理也简单,循环读取文件夹里的图片处理即可.具体代码可以去我的 GitHub下载. 程序 Method 1 def plot_sketch(origin_picture, out_picture) : a = np.asarray(Im

  • 教你用Python读取CSV文件的5种方式

    目录 第一招:简单的读取 第二招:用nametuple 第三招:用tuple类型转换 第四招:用DictReader 第五招:用字典转换 典型的数据集stocks.csv: 一个股票的数据集,其实就是常见的表格数据.有股票代码,价格,日期,时间,价格变动和成交量.这个数据集其实就是一个表格数据,有自己的头部和身体. 第一招:简单的读取 我们先来看一种简单读取方法,先用csv.reader()函数读取文件的句柄f生成一个csv的句柄,其实就是一个迭代器,我们看一下这个reader的源码: 喂给re

  • 利用python将xml文件解析成html文件的实现方法

    功能就是题目所述,我的python2.7,装在windows环境,我使用的开发工具是wingide 6.0 1.首先是我设计的简单的一个xml文件,也就是用来解析的源文件 下面是这个文件website.xml内容: <website> <page name="index" title="fuckyou"> <h1>welcome to</h1> <p>this is a moment</p> &

  • 对python 各种删除文件失败的处理方式分享

    调用python提供的各种删除文件的操作均失败 返回值5,拒绝访问,但是多次确认文件没有被打开,文件是从一个zip包中解压出来后,没有任何打开读写等操作 最后调用windows的强制删除命令才搞定 try: #shutil.rmtree(UPDATE_DIR_STR) #this maybe can't delete some files by error 5 os.system("rd/s/q 目录名") except Exception, e: pass print e 以上这篇对

  • python将中文数字转化成阿拉伯数字的简单方法

    正则表达式提取文本中的数字 这里演示一下文本中提取中文年份 import re m0 = "在一九四九年新中国成立比一九九零年低百分之五点二人一九九六年击败俄军,取得实质独立" pattrern1 = '[零一二三四五六七八九]{4,}' pattrern2 = '[〇一二三四五六七八九零壹贰叁肆伍陆柒捌玖貮两]{4,}' time1 = re.findall(pattrern1,m0)#转化数字 提取年份如:'1949', '1990', '1996' 这里给出许多正则表达式的样例:

  • Python中py文件转换成exe可执行文件的方法

    一.背景 今天闲着无事,写了一个小小的Python脚本程序,然后给同学炫耀的时候,发现每次都得拉着其他人过来看着自己的电脑屏幕,感觉不是很爽,然后我想着网上肯定有关于Python脚本转换成可执行文件的操作,事不宜迟,我就开始了问度娘,各种寻找资料,发现网上的资料太多了,有一些比较老了,适合Python2.x系列,在现在Python3流行的时代,我们当然是直接无视,但是各种方法凌乱的很,各种教程也是或全或缺的,鄙人也捣鼓了可久,后来发现一种方法挺多人用的,在自己的程序成功打包成执行文件并在其他人电

  • Python处理mat文件的三种方式小结

    目录 处理mat文件的三种方式 scipy h5py mat73 mat4py python操作.mat文件 python读取.mat格式 mat转图片 处理mat文件的三种方式 读书的时候,处理数据都是采用matlab,但毕业后当了程序员,matlab从此在自己的电脑上消失了(安装包太大,还要license,启动也好慢,不符合程序员的需求). 但是最近公司仿真的数据是以matlab的.mat格式存储的,需要读取出来处理,那就找找python相关的库吧,没有python干不了的活!!! mat文

  • 用python把ipynb文件转换成pdf文件过程详解

    这两天一直在做课件,我个人一直不太喜欢PPT这个东西--能不用就不用,我个人特别崇尚极简风. 谁让我们是程序员呢,所以就爱上了Jupyter写课件,讲道理markdown也是个非常不错的写书格式啊. 安装Jupyter其实非常简单,你会python就应该会用jupyter,起码简单的 pip install jupyter, jupyter notebook 要会对伐- 好那接下来就是使用jupyter了,启动jupyter后,使用浏览器访问相应IP:Port就可以使用了.没错,jupyter就

随机推荐