小书匠 Graph 图论 

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

目录:


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

10线性代数相关

10.1图矩阵

  1. #定义图的节点和边 

  2. nodes=['0','1','2','3','4','5','a','b','c'] 

  3. edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)] 


  4. plt.subplots(1,2,figsize=(10,3)) 


  5. #定义一个无向图和有向图 

  6. G1 = nx.Graph() 

  7. G1.add_nodes_from(nodes) 

  8. G1.add_weighted_edges_from(edges) 


  9. G2 = nx.DiGraph() 

  10. G2.add_nodes_from(nodes) 

  11. G2.add_weighted_edges_from(edges) 


  12. pos1=nx.circular_layout(G1) 

  13. pos2=nx.circular_layout(G2) 


  14. #画出无向图和有向图 

  15. plt.subplot(121) 

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

  17. plt.title('无向图',fontproperties=myfont) 

  18. plt.axis('on') 

  19. plt.xticks([]) 

  20. plt.yticks([]) 


  21. plt.subplot(122) 

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

  23. plt.title('有向图',fontproperties=myfont) 

  24. plt.axis('on') 

  25. plt.xticks([]) 

  26. plt.yticks([]) 


  27. plt.show() 


  28. #控制numpy输出小数位数 

  29. import numpy as np 

  30. np.set_printoptions(precision=3)  


  31. #邻接矩阵 

  32. A = nx.adjacency_matrix(G1) 

  33. print('邻接矩阵:\n',A.todense()) 


  34. #关联矩阵 

  35. I = nx.incidence_matrix(G1) 

  36. print('\n关联矩阵:\n',I.todense()) 


  37. #拉普拉斯矩阵 

  38. L=nx.laplacian_matrix(G1) 

  39. print('\n拉普拉斯矩阵:\n',L.todense()) 


  40. #标准化的拉普拉斯矩阵 

  41. NL=nx.normalized_laplacian_matrix(G1) 

  42. print('\n标准化的拉普拉斯矩阵:\n',NL.todense()) 


  43. #有向图拉普拉斯矩阵 

  44. DL=nx.directed_laplacian_matrix(G2) 

  45. print('\n有向拉普拉斯矩阵:\n',DL) 


  46. #拉普拉斯算子的特征值 

  47. LS=nx.laplacian_spectrum(G1) 

  48. print('\n拉普拉斯算子的特征值:\n',LS) 


  49. #邻接矩阵的特征值 

  50. AS=nx.adjacency_spectrum(G1) 

  51. print('\n邻接矩阵的特征值:\n',AS) 


  52. #无向图的代数连通性 

  53. AC=nx.algebraic_connectivity(G1) 

  54. print('\n无向图的代数连通性:\n',AC) 


  55. #图的光谱排序 

  56. SO=nx.spectral_ordering(G1) 

  57. print('\n图的光谱排序:\n',SO) 


  58. #两个矩阵的解释看:https://blog.csdn.net/Hanging_Gardens/article/details/55670356 


图矩阵示例

输出:

  1. 邻接矩阵: 

  2. [[0. 0. 0. 0. 5. 0. 0. 0. 6. ] 

  3. [0. 0. 0. 2. 0. 0. 0. 0. 0. ] 

  4. [0. 0. 0. 0. 0. 0.5 0.5 0. 0. ] 

  5. [0. 2. 0. 1. 1. 0. 0. 0. 0. ] 

  6. [5. 0. 0. 1. 0. 0. 0. 0. 7. ] 

  7. [0. 0. 0.5 0. 0. 0. 0.5 0. 0. ] 

  8. [0. 0. 0.5 0. 0. 0.5 0. 0. 0. ] 

  9. [0. 0. 0. 0. 0. 0. 0. 0. 0. ] 

  10. [6. 0. 0. 0. 7. 0. 0. 0. 0. ]] 


  11. 关联矩阵: 

  12. [[1. 1. 0. 0. 0. 0. 0. 0. 0.] 

  13. [0. 0. 1. 0. 0. 0. 0. 0. 0.] 

  14. [0. 0. 0. 1. 1. 0. 0. 0. 0.] 

  15. [0. 0. 1. 0. 0. 1. 0. 0. 0.] 

  16. [0. 1. 0. 0. 0. 1. 0. 1. 0.] 

  17. [0. 0. 0. 1. 0. 0. 0. 0. 1.] 

  18. [0. 0. 0. 0. 1. 0. 0. 0. 1.] 

  19. [0. 0. 0. 0. 0. 0. 0. 0. 0.] 

  20. [1. 0. 0. 0. 0. 0. 0. 1. 0.]] 


  21. 拉普拉斯矩阵: 

  22. [[11. 0. 0. 0. -5. 0. 0. 0. -6. ] 

  23. [ 0. 2. 0. -2. 0. 0. 0. 0. 0. ] 

  24. [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ] 

  25. [ 0. -2. 0. 3. -1. 0. 0. 0. 0. ] 

  26. [-5. 0. 0. -1. 13. 0. 0. 0. -7. ] 

  27. [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ] 

  28. [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ] 

  29. [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ] 

  30. [-6. 0. 0. 0. -7. 0. 0. 0. 13. ]] 


  31. 标准化的拉普拉斯矩阵: 

  32. [[ 1. 0. 0. 0. -0.418 0. 0. 0. -0.502] 

  33. [ 0. 1. 0. -0.707 0. 0. 0. 0. 0. ] 

  34. [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ] 

  35. [ 0. -0.707 0. 0.75 -0.139 0. 0. 0. 0. ] 

  36. [-0.418 0. 0. -0.139 1. 0. 0. 0. -0.538] 

  37. [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ] 

  38. [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ] 

  39. [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ] 

  40. [-0.502 0. 0. 0. -0.538 0. 0. 0. 1. ]] 


  41. 有向拉普拉斯矩阵: 

  42. [[ 0.889 -0.117 -0.029 -0.087 -0.319 -0.029 -0.029 -0.129 -0.242] 

  43. [-0.117 0.889 -0.026 -0.278 -0.051 -0.026 -0.026 -0.114 -0.056] 

  44. [-0.029 -0.026 0.994 -0.012 -0.009 -0.481 -0.481 -0.025 -0.01 ] 

  45. [-0.087 -0.278 -0.012 0.757 -0.097 -0.012 -0.012 -0.052 -0.006] 

  46. [-0.319 -0.051 -0.009 -0.097 0.994 -0.009 -0.009 -0.041 -0.434] 

  47. [-0.029 -0.026 -0.481 -0.012 -0.009 0.994 -0.481 -0.025 -0.01 ] 

  48. [-0.029 -0.026 -0.481 -0.012 -0.009 -0.481 0.994 -0.025 -0.01 ] 

  49. [-0.129 -0.114 -0.025 -0.052 -0.041 -0.025 -0.025 0.889 -0.045] 

  50. [-0.242 -0.056 -0.01 -0.006 -0.434 -0.01 -0.01 -0.045 0.994]] 


  51. 拉普拉斯算子的特征值: 

  52. [-1.436e-15 0.000e+00 4.610e-16 7.000e-01 1.500e+00 1.500e+00 

  53. 4.576e+00 1.660e+01 2.013e+01] 


  54. 邻接矩阵的特征值: 

  55. [12.068+0.000e+00j 2.588+0.000e+00j -7.219+0.000e+00j -4.925+0.000e+00j 

  56. -1.513+0.000e+00j 1. +0.000e+00j -0.5 +2.393e-17j -0.5 -2.393e-17j 

  57. 0. +0.000e+00j] 


  58. 无向图的代数连通性: 

  59. 0.0 


  60. 图的光谱排序: 

  61. ['4', '2', '1', '0', '5', 'b', 'c', 'a', '3'] 


后面还有两个小节,由于对图论算法不是很明白,所以先讲明白算法原理,再使用networkX实现,如无须读算法,可以跳过算法原理部分.

NetworkX系列教程(9)-线性代数相关的更多相关文章

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

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

  2. NetworkX系列教程(11)-graph和其他数据格式转换

    小书匠 Graph 图论  学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.grpah存储可以使用矩阵,比如graph的邻接矩阵,权重矩阵等,这节主要是在等到graph后 ...

  3. NetworkX系列教程(10)-算法之五:广度优先与深度优先

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

  4. NetworkX系列教程(10)-算法之四:拓扑排序与最大流问题

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

  5. NetworkX系列教程(10)-算法之三:关键路径问题

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

  6. NetworkX系列教程(10)-算法之二:最小/大生成树问题

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

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

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

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

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

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

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

随机推荐

  1. metasploit安卓木马

    metasploit---安卓木马入侵 (仅供学习使用,禁止非法使用) 1.生成木马程序 msfvenom -p android/meterpreter/reverse_tcp LHOST=本机ip ...

  2. 四、eureka服务端同步注册操作

    所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 在eureka服务端注册服务一文中,我们提到register方法做了两件事 1)注册服务 ...

  3. 【转载】 C#通过File类实现文件拷贝复制的功能

    在Windows系统的使用过程中,一个较常使用的功能就是文件的复制拷贝操作,其实在C#开发中,也可以使用File类库中的Copy方法来实现文件的拷贝,支持设定原文件地址,以及拷贝复制后的文件存放路径. ...

  4. window事件

    window事件是较为重要的事件,接下来就讲解一下. 1.获取页面滚动栏的距离 什么是滚动栏,就是网页内容过多时,通过滚轮控制上下显示或者左右显示: 为窗口添加滚动条事件: window.onscro ...

  5. python使用Pyinstaller打包

    一.前言 python文件打包,将.py文件转化成.exe文件(windows平台),可以使用Pyinstaller来打包 Pyinstaller可以在全平台下使用,但是请注意打包生成的文件不能在全平 ...

  6. vue中计算属性和侦听属性

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. SQLSEVER刚建表时主键自增

    alter table 表名 drop column ID alter table 表名 add ID int identity(1,1)

  8. ubuntu18.04安装wine

    wine是一个兼容层,可以从多平台(linux,macos,等)运行windows应用. Wine (Wine Is Not an Emulator)[即Wine不是一个模拟器]是一个在Linux和U ...

  9. java中javamail收发邮件实现方法

    概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...

  10. 详解Linux磁盘管理与文件系统

    磁盘基础 硬盘结构 物理结构 盘片:硬盘有多个盘片,每盘片 2 面. 磁头:每面一个磁头. 数据结构 扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区. 硬盘的第一个扇区,叫做引导扇区 ...