小书匠 Graph 图论 

学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.grpah存储可以使用矩阵,比如graph的邻接矩阵,权重矩阵等,这节主要是在等到graph后,如何快速得到这些信息.详细官方文档在这里

目录:


注意:如果代码出现找不库,请返回第一个教程,把库文件导入.

12.graph和其他数据格式转换

12.1graph与字典(Dict)

  1. #从字典生成图 

  2. dod = {0: {1: {'weight': 1}}}  

  3. G = nx.from_dict_of_dicts(dod) #或G=nx.Graph(dpl) 

  4. plt.subplots(1,1,figsize=(6,3)) 

  5. nx.draw(G, with_labels=True, font_weight='bold') 

  6. plt.axis('on') 

  7. plt.xticks([]) 

  8. plt.yticks([]) 

  9. plt.show() 


  10. #图转换为字典 

  11. print(nx.to_dict_of_dicts(G)) 


graph与字典(Dict)示例

输出:

{0: {1: {'weight': 1}}, 1: {0: {'weight': 1}}}


12.2graph与列表(List)

  1. #从列表中创建graph 

  2. dol = {0: [1,2,3]} 

  3. edgelist = [(0, 1),(0,3),(2,3)] 


  4. G1 = nx.from_dict_of_lists(dol) #或G=nx.Graph(dol) 

  5. G2=nx.from_edgelist(edgelist) 


  6. #显示graph 

  7. plt.subplots(1,2,figsize=(15,3)) 

  8. plt.subplot(121) 

  9. nx.draw(G1, with_labels=True, font_weight='bold') 

  10. plt.axis('on') 

  11. plt.xticks([]) 

  12. plt.yticks([]) 

  13. plt.subplot(122) 

  14. nx.draw(G2, with_labels=True, font_weight='bold') 

  15. plt.axis('on') 

  16. plt.xticks([]) 

  17. plt.yticks([]) 

  18. plt.show() 


  19. #graph转list 

  20. print(nx.to_dict_of_lists(G1)) 

  21. print(nx.to_edgelist(G1)) 


graph与列表(List)示例

输出:

{0: [1, 2, 3], 1: [0], 2: [0], 3: [0]}

[(0, 1, {}), (0, 2, {}), (0, 3, {})]


12.3graph与numpy

  1. #从numpy创建graph 

  2. import numpy as np 

  3. a = np.reshape(np.random.random_integers(0, 1, size=100), (10, 10)) 

  4. D = nx.DiGraph(a) 

  5. nx.draw(D, with_labels=True, font_weight='bold') 

  6. plt.axis('on') 

  7. plt.xticks([]) 

  8. plt.yticks([]) 

  9. plt.show() 


  10. #graph返回numpy 

  11. G=nx.Graph() 

  12. G.add_edge(1, 2, weight=7.0, cost=5) 

  13. A1 = nx.to_numpy_matrix(G) 

  14. A2 = nx.to_numpy_recarray(G, dtype=[('weight', float), ('cost', int)]) 

  15. print(A1,A2) 


graph与numpy示例

输出:

  1. [[0. 7.] 

  2. [7. 0.]] [[(0., 0) (7., 5)] 

  3. [(7., 5) (0., 0)]] 


12.4graph与Scipy

  1. #从scipy创建graph 

  2. G.clear() 

  3. import scipy as sp 

  4. A = sp.sparse.eye(2, 2, 1) 

  5. G = nx.from_scipy_sparse_matrix(A) 

  6. nx.draw(D, with_labels=True, font_weight='bold') 

  7. plt.axis('on') 

  8. plt.xticks([]) 

  9. plt.yticks([]) 

  10. plt.show() 


  11. #graph返回scipy 

  12. A = nx.to_scipy_sparse_matrix(G) 

  13. print(A.todense()) 


graph与Scipy示例

输出:

  1. [[0. 1.] 

  2. [1. 0.]] 


12.5graph与Pandas

  1. #从pandas创建graph 

  2. G.clear() 

  3. import pandas as pd 

  4. df = pd.DataFrame([[1, 1], [2, 1]]) 

  5. G = nx.from_pandas_adjacency(df) 

  6. nx.draw(D, with_labels=True, font_weight='bold') 

  7. plt.axis('on') 

  8. plt.xticks([]) 

  9. plt.yticks([]) 

  10. plt.show() 


  11. #graph返回scipy 

  12. df = nx.to_pandas_adjacency(G) 

  13. print(df) 


graph与Pandas示例

输出:

  1. 0 1 

  2. 0 1.0 2.0 

NetworkX系列教程(11)-graph和其他数据格式转换的更多相关文章

  1. NetworkX系列教程(2)-graph生成器

    小书匠Graph图论 本节主要讲解如何快速使用内置的方法生成graph,官方的文档在这里,里面包含了networkX的所有graph生成器,下面的内容只是我节选的内容,并将graph画出来而已. 声明 ...

  2. NetworkX系列教程(10)-算法之一:最短路径问题

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  3. NetworkX系列教程(1)-创建graph

    小书匠Graph图论 研究中经常涉及到图论的相关知识,而且常常面对某些术语时,根本不知道在说什么.前不久接触了NetworkX这个graph处理工具,发现这个工具已经解决绝大部分的图论问题(也许只是我 ...

  4. NetworkX系列教程(8)-Drawing Graph

    小书匠Graph图论 如果只是简单使用nx.draw,是无法定制出自己需要的graph,并且这样的graph内的点坐标的不定的,运行一次变一次,实际中一般是要求固定的位置,这就需要到布局的概念了.详细 ...

  5. NetworkX系列教程(7)-对graph进行分析

    小书匠Graph图论 graph构建完成后,对graph的连通等属性进行分析. 目录: 8.对图进行分析 8.1连通子图 8.2弱联通 8.3强连通 8.4子图 8.5条件过滤 注意:如果代码出现找不 ...

  6. NetworkX系列教程(6)-对graph进行操作

    小书匠Graph图论 graph生成后,除了有查看操作,还有移除等操作,还有其他更多操作,具体可以看这里.下面将比较graph操作前后的不同. 目录: 7.对图进行操作 7.1移除某些节点和边 7.2 ...

  7. NetworkX系列教程(5)-查看graph的信息

    小书匠Graph图论 有时候graph建好后,我们并不清除该graph内节点的,边的信息,这就需要调用函数去查看了. 目录: 6.查看Graph的信息 6.1查看graph内节点,边的 6.2查看gr ...

  8. NetworkX系列教程(4)-设置graph的信息

    小书匠Graph图论 要画出美观的graph,需要对graph里面的节点,边,节点的布局都要进行设置,具体可以看官方文档:Adding attributes to graphs, nodes, and ...

  9. NetworkX系列教程(3)-手动创建graph

    小书匠Graph图论 不可否认,日常中我们使用最多的还是,使用自己的数据去手动创建自己的图形,而不是使用生成器,现从给graph添加点和边入手,讲解手动创建graph. 目录: 3.给graph添加节 ...

随机推荐

  1. Unity3D 跨平台原理

    Unity3D的跨平台原理核心在于对指令集CIL(通用中间语言)的应用. 机理 首先需要知道,Unity中的Mono是基于 通用语言架构(Common Language Infrastructure, ...

  2. python之(TensorFlow)深度学习

    一.深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artifi ...

  3. Go语言的成功也预示着Rust的成功【转】

    从整体的角度来看Go,很难理解他是怎么取得这么大的成功的.从理论的角度上来说Go是一门非常糟糕的语言,就算是和C++或者Ada之类旧语言相比也是这样. 从整体的角度来看Go,很难理解他是怎么取得这么大 ...

  4. 广州CBC2019

    CBC2019-day1 25 August 2019 on 学术前沿huyujia 8月24日上午,CBC2019正式开幕.主持人首先对大会情况以及与会嘉宾做了简要介绍:紧接着,校领导.大会主席以及 ...

  5. 【转载】C#中可使用string.Empty代表空字符

    在C#中,如果赋值一个字符串为空白字符串,我们一般会用“”的形式对字符串进行赋值操作,其实在C#的字符串类String类中,有个专门的常量string.Empty来代表空字符串,可直接在赋值的时候使用 ...

  6. 字符串导出xml文件并弹出下载对话框

    转自:https://blog.csdn.net/zhandingfeng/article/details/53887354 导出单个xml文件:[java] view plain copy      ...

  7. Zabbix-报警之微信(Wechat alert)告警

    1.前言 Zabbix告警发送是监控系统的重要功能之一.Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式 ...

  8. 【转】TI DSP C6657学习之——编译静态库.lib

    熟悉C++开发的的小伙伴都知道,我们一般代码中往往要引入许多第三方编译好的库,有些是静态链接库static library, 有些是动态链接库dll.引入库的目的一是减少代码的编译时间,二是只提供函数 ...

  9. Linux 新手入门教程

    Linux 新手入门教程 1991年10月5日,Linus Torvalds 在互联网上发布消息,宣布他自己开发的内核系统诞生了.他将内核源代码保存在芬兰最大的 FTP 网站上,命名为 Linux,取 ...

  10. 解决 Jumpserver coco 使用登录用户(ldap)进行SSH连接目标主机,忽略系统用户

    前言 Jumpserver 作为国内流行的开源堡垒机,很多公司都在尝试使用,同时 Jumpserver 为了契合众多公司的用户认证,也提供了 LDAP 的用户认证方式,作为 Jumpserver 的用 ...