Convert Adjacency matrix into edgelist
Table of Contents
- [Edge List <-- Adjacency Matrix](# Edge List <-- Adjacency Matrix)
- [Edge List --> Adjacency Matrix](# Edge List --> Adjacency Matrix)
- [About Adjacency List](#About Adjacency List)
Edge List <-- Adjacency Matrix
'''
ref: https://www.cnblogs.com/sonictl/p/10688533.html
convert adjMatrix into edgelist: 'data/unweighted_edgelist.number' or 'data/weighted_edgelist.number''
input: adjacency matrix with delimiter=', '
it can process:
- Unweighted directed graph
- Weighted directed graph
output: edgelist (unweighted and weighted)
'''
import numpy as np
import networkx as nx
# -------DIRECTED Graph, Unweighted-----------
# Unweighted directed graph:
a = np.loadtxt('data/test_adjMatrix.txt', delimiter=', ', dtype=int)
D = nx.DiGraph(a)
nx.write_edgelist(D, 'data/unweighted_edgelist.number', data=False) # output
edges = [(u, v) for (u, v) in D.edges()]
print(edges)
# -------DIRECTED Graph, Weighted------------
# Weighted directed graph (weighted adj_matrix):
a = np.loadtxt('data/adjmatrix_weight_sample.txt', delimiter=', ', dtype=float)
D = nx.DiGraph(a)
nx.write_weighted_edgelist(D, 'data/weighted_edgelist.number') # write the weighted edgelist into file
# print(D.edges)
elarge = [(u, v, d['weight']) for (u, v, d) in D.edges(data=True) if d['weight'] > 0.]
print(elarge) # class: list
# -------UNDIRECTED Graph -------------------
# for undirected graph, simply use:
udrtG = D.to_undirected()
'''
test_adjMatrix.txt: (Symmetric matrices if unweighted graph)
---
0, 1, 1, 1, 0, 1, 1, 0
0, 0, 1, 0, 0, 0, 1, 1
0, 0, 0, 1, 1, 0, 0, 0
0, 1, 0, 0, 1, 1, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 1, 0, 0, 0, 0, 0
===
adjmatrix_weight_sample.txt:
---
0, 0.5, 0.5, 0.5, 0, 0.5, 0.5, 0
0, 0, 0.5, 0, 0, 0, 0.5, 0.5
0, 0, 0, 0.5, 0.5, 0, 0, 0
0, 0.5, 0, 0, 0.5, 0.5, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0.5, 0, 0, 0, 0, 0
===
output:
---
[(0, 1), (0, 2), (0, 3), (0, 5), (0, 6), (1, 2), (1, 6), (1, 7), (2, 3), (2, 4), (3, 1), (3, 4), (3, 5), (7, 2)]
[(0, 1, 0.5), (0, 2, 0.5), (0, 3, 0.5), (0, 5, 0.5), (0, 6, 0.5), (1, 2, 0.5), (1, 6, 0.5), (1, 7, 0.5), (2, 3, 0.5), (2, 4, 0.5), (3, 1, 0.5), (3, 4, 0.5), (3, 5, 0.5), (7, 2, 0.5)]
===
'''
Edge List --> Adjacency Matrix
'''
https://networkx.github.io/documentation/networkx-2.2/reference/generated/networkx.linalg.graphmatrix.adjacency_matrix.html
'''
import numpy
import networkx as nx
# edgelist to adjacency matrix
# way1: G=nx.read_edgelist
D = nx.read_edgelist('input/edgelist_sample.txt', create_using=nx.DiGraph(), nodetype=int) # create_using=nx.Graph()
print(D.edges)
print(D.nodes)
# way2:
'''
a = numpy.loadtxt('input/edgelist_sample.txt', dtype=int)
edges = [tuple(e) for e in a]
D = nx.DiGraph()
D.add_edges_from(edges) # D.add_edges_from(nodes); D.edges; D.nodes
D.name = 'digraph_sample'
print(nx.info(D))
udrtG = D.to_undirected()
udrtG.name = 'udrt'
print(nx.info(udrtG))
'''
# dump to file as adjacency Matrix
A = nx.adjacency_matrix(D, nodelist=list(range(len(D.nodes)))) # nx.adjacency_matrix(D, nodelist=None, weight='weight') # Return type: SciPy sparse matrix
# print(A) # type < SciPy sparse matrix >
A_dense = A.todense() # type-> numpy.matrixlib.defmatrix.matrix
print(A_dense, type(A_dense))
print('--- See two row of matrix equal or not: ---')
print((numpy.equal(A_dense[5], A_dense[6])).all())
# print('to_numpy_array:\n', nx.to_numpy_array(D, nodelist=list(range(len(D.nodes)))))
# print('to_dict_of_dicts:\n', nx.to_dict_of_dicts(D, nodelist=list(range(len(D.nodes)))))
About Adjacency LIST
nx.read_adjlist()
Convert Adjacency matrix into edgelist
import numpy as np
#read matrix without head.
a = np.loadtxt('admatrix.txt', delimiter=', ', dtype=int) #set the delimiter as you need
print "a:"
print a
print 'shape:',a.shape[0] ,"*", a.shape[1]
num_nodes = a.shape[0] + a.shape[1]
num_edge = 0
edgeSet = set()
for row in range(a.shape[0]):
for column in range(a.shape[1]):
if a.item(row,column) == 1 and (column,row) not in edgeSet: #get rid of repeat edge
num_edge += 1
edgeSet.add((row,column))
print '\nnum_edge:', num_edge
print 'edge Set:', edgeSet
print ''
for edge in edgeSet:
print edge[0] , edge[1]
Sample Adjacency Matrix Input file:
0, 1, 1, 1, 0, 1, 1, 0
0, 0, 1, 0, 0, 0, 1, 1
0, 0, 0, 1, 1, 0, 0, 0
0, 1, 0, 0, 1, 1, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0
0, 0, 1, 0, 0, 0, 0, 0
Convert Adjacency matrix into edgelist的更多相关文章
- 路径规划 Adjacency matrix 传球问题
建模 问题是什么 知道了问题是什么答案就ok了 重复考虑 与 重复计算 程序可以重复考虑 但往目标篮子中放入时,放不放把握好就ok了. 集合 交集 并集 w 路径规划 字符串处理 42423 424 ...
- 【leetcode】1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
题目如下: Given a m x n binary matrix mat. In one step, you can choose one cell and flip it and all the ...
- LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix (最少翻转次数将二进制矩阵全部置为0)
给一个矩阵mat,每个格子都是0或1,翻转一个格子会将该格子以及相邻的格子(有共同边)全部翻转(0变为1,1变为0) 求问最少需要翻转几次将所有格子全部置为0. 这题的重点是数据范围,比赛结束看了眼数 ...
- Adjacency matrix based Graph
Interface AddVertex(T data) AddEdge(int from, int to) DFS BFS MST TopSort PrintGraph using System; u ...
- R matrix 转换为 dataframe
When I try converting a matrix to a data frame, it works for me: > x <- matrix(1:6,ncol=2,dimn ...
- 拉普拉斯矩阵(Laplacian Matrix) 及半正定性证明
摘自 https://blog.csdn.net/beiyangdashu/article/details/49300479 和 https://en.wikipedia.org/wiki/Lapla ...
- Distance matrix
w https://en.wikipedia.org/wiki/Distance_matrix For example, suppose these data are to be analyzed, ...
- 用matalb、python画聚类结果图
用matlab %读入聚类后的数据, 已经分好级别了,例如前4行是亚洲一流, %-13是亚洲二流,-24是亚洲三流 a=xlsread('C:\Users\Liugengxin\Desktop\1.x ...
- OO课程第三次总结QWQ
调研,然后总结介绍规格化设计的大致发展历史和为什么得到了人们的重视 emmm为这个问题翻遍百度谷歌知乎也没有得到答案,那我就把自己认为最重要的两点简要说明一下吧,欢迎大家补充~ 1.便于完成代码的重用 ...
随机推荐
- 如何注册Tomcat到Window Service服务
win+R打开运行窗口,输入cmd打开dos窗口,使用cd命令将位置切换到tomcat路径下的bin文件,本机是F盘下. 先输入F:回车进入F盘,然后输入命令cd F:\apache-tomcat-5 ...
- fdsafdsafds
name1 = input('请输入一个名字:') name2 = input('请输入一个名字: ') animal = input('请输入一个名字 :') print('刚按完摩的{}出门看见{ ...
- python3-datetime.date详解(一)
datetime是python操作日期和时间的内置模块. python有两种日期.时间对象:“naive”和“aware”.前者由于忽略了实际情况更容易理解,操作.在任何时间空间内,它的值都取决于一个 ...
- jquery的相关用法
选择器基本选择器1.id选择器$('#id1')找到id为id1 的标签2.class选择器$('.class1')找到class中有class1这个类的标签3.标签选择器$('tag') 找到tag ...
- advanceskeleton插件分身体和表情单独绑定的时候合并表情步骤
advanceskeleton插件分身体和表情单独绑定的时候合并表情使用的代码以及合并步骤 1.身体单独绑定 2.表情单独绑定 3.合并步骤 ①原有adv表情文件删掉除了curve组以外所有东西 删除 ...
- JSP + JDBC + MySQL 读取数据库内容到网页
创建数据库表 导入JDCB驱动 mysql.jsp <%@ page language="java" %> <%@ page contentType=" ...
- Linux安装MySQL_5.6
E&T: CentOS_7.4 64位; mysql-5.6.42-linux-glibc2.12-x86_64.tar; Xftp5; Xshell5; P1.下载Linux环境下的MySQ ...
- Redis纠错
在Java使用Redis的过程中遇见了一个问题, redis.clients.jedis.exceptions.JedisConnectionException: Could not get a re ...
- Git 概念
Git 概念 一.Git 工作流程 ~ Workspace:工作区 ~ Index/ Stage:暂存区 ~ Repository:仓库区(或本地仓库) ~ Remote:远程仓库 工作区 进行开发改 ...
- python-闭包函数
在函数编程中经常用到闭包.闭包是什么,它是怎么产生的及用来解决什么问题呢.给出字面的定义先:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)(想想Erlang的外层函数传入一个 ...