• NetworkX系列教程(9)-线性代数相关


    学过线性代数的都了解矩阵,在矩阵上的文章可做的很多,什么特征矩阵,单位矩阵等.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.  
    5. plt.subplots(1,2,figsize=(10,3)) 
    6.  
    7. #定义一个无向图和有向图 
    8. G1 = nx.Graph() 
    9. G1.add_nodes_from(nodes) 
    10. G1.add_weighted_edges_from(edges) 
    11.  
    12. G2 = nx.DiGraph() 
    13. G2.add_nodes_from(nodes) 
    14. G2.add_weighted_edges_from(edges) 
    15.  
    16. pos1=nx.circular_layout(G1) 
    17. pos2=nx.circular_layout(G2) 
    18.  
    19. #画出无向图和有向图 
    20. plt.subplot(121
    21. nx.draw(G1,pos1, with_labels=True, font_weight='bold'
    22. plt.title('无向图',fontproperties=myfont) 
    23. plt.axis('on'
    24. plt.xticks([]) 
    25. plt.yticks([]) 
    26.  
    27. plt.subplot(122
    28. nx.draw(G2,pos2, with_labels=True, font_weight='bold'
    29. plt.title('有向图',fontproperties=myfont) 
    30. plt.axis('on'
    31. plt.xticks([]) 
    32. plt.yticks([]) 
    33.  
    34. plt.show() 
    35.  
    36. #控制numpy输出小数位数 
    37. import numpy as np 
    38. np.set_printoptions(precision=3)  
    39.  
    40. #邻接矩阵 
    41. A = nx.adjacency_matrix(G1) 
    42. print('邻接矩阵: ',A.todense()) 
    43.  
    44. #关联矩阵 
    45. I = nx.incidence_matrix(G1) 
    46. print(' 关联矩阵: ',I.todense()) 
    47.  
    48. #拉普拉斯矩阵 
    49. L=nx.laplacian_matrix(G1) 
    50. print(' 拉普拉斯矩阵: ',L.todense()) 
    51.  
    52. #标准化的拉普拉斯矩阵 
    53. NL=nx.normalized_laplacian_matrix(G1) 
    54. print(' 标准化的拉普拉斯矩阵: ',NL.todense()) 
    55.  
    56. #有向图拉普拉斯矩阵 
    57. DL=nx.directed_laplacian_matrix(G2) 
    58. print(' 有向拉普拉斯矩阵: ',DL) 
    59.  
    60. #拉普拉斯算子的特征值 
    61. LS=nx.laplacian_spectrum(G1) 
    62. print(' 拉普拉斯算子的特征值: ',LS) 
    63.  
    64. #邻接矩阵的特征值 
    65. AS=nx.adjacency_spectrum(G1) 
    66. print(' 邻接矩阵的特征值: ',AS) 
    67.  
    68. #无向图的代数连通性 
    69. AC=nx.algebraic_connectivity(G1) 
    70. print(' 无向图的代数连通性: ',AC) 
    71.  
    72. #图的光谱排序 
    73. SO=nx.spectral_ordering(G1) 
    74. print(' 图的光谱排序: ',SO) 
    75.  
    76. #两个矩阵的解释看: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. 关联矩阵: 
    13. [[1. 1. 0. 0. 0. 0. 0. 0. 0.] 
    14. [0. 0. 1. 0. 0. 0. 0. 0. 0.] 
    15. [0. 0. 0. 1. 1. 0. 0. 0. 0.] 
    16. [0. 0. 1. 0. 0. 1. 0. 0. 0.] 
    17. [0. 1. 0. 0. 0. 1. 0. 1. 0.] 
    18. [0. 0. 0. 1. 0. 0. 0. 0. 1.] 
    19. [0. 0. 0. 0. 1. 0. 0. 0. 1.] 
    20. [0. 0. 0. 0. 0. 0. 0. 0. 0.] 
    21. [1. 0. 0. 0. 0. 0. 0. 1. 0.]] 
    22.  
    23. 拉普拉斯矩阵: 
    24. [[11. 0. 0. 0. -5. 0. 0. 0. -6. ] 
    25. [ 0. 2. 0. -2. 0. 0. 0. 0. 0. ] 
    26. [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ] 
    27. [ 0. -2. 0. 3. -1. 0. 0. 0. 0. ] 
    28. [-5. 0. 0. -1. 13. 0. 0. 0. -7. ] 
    29. [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ] 
    30. [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ] 
    31. [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ] 
    32. [-6. 0. 0. 0. -7. 0. 0. 0. 13. ]] 
    33.  
    34. 标准化的拉普拉斯矩阵: 
    35. [[ 1. 0. 0. 0. -0.418 0. 0. 0. -0.502] 
    36. [ 0. 1. 0. -0.707 0. 0. 0. 0. 0. ] 
    37. [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ] 
    38. [ 0. -0.707 0. 0.75 -0.139 0. 0. 0. 0. ] 
    39. [-0.418 0. 0. -0.139 1. 0. 0. 0. -0.538] 
    40. [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ] 
    41. [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ] 
    42. [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ] 
    43. [-0.502 0. 0. 0. -0.538 0. 0. 0. 1. ]] 
    44.  
    45. 有向拉普拉斯矩阵: 
    46. [[ 0.889 -0.117 -0.029 -0.087 -0.319 -0.029 -0.029 -0.129 -0.242] 
    47. [-0.117 0.889 -0.026 -0.278 -0.051 -0.026 -0.026 -0.114 -0.056] 
    48. [-0.029 -0.026 0.994 -0.012 -0.009 -0.481 -0.481 -0.025 -0.01 ] 
    49. [-0.087 -0.278 -0.012 0.757 -0.097 -0.012 -0.012 -0.052 -0.006] 
    50. [-0.319 -0.051 -0.009 -0.097 0.994 -0.009 -0.009 -0.041 -0.434] 
    51. [-0.029 -0.026 -0.481 -0.012 -0.009 0.994 -0.481 -0.025 -0.01 ] 
    52. [-0.029 -0.026 -0.481 -0.012 -0.009 -0.481 0.994 -0.025 -0.01 ] 
    53. [-0.129 -0.114 -0.025 -0.052 -0.041 -0.025 -0.025 0.889 -0.045] 
    54. [-0.242 -0.056 -0.01 -0.006 -0.434 -0.01 -0.01 -0.045 0.994]] 
    55.  
    56. 拉普拉斯算子的特征值: 
    57. [-1.436e-15 0.000e+00 4.610e-16 7.000e-01 1.500e+00 1.500e+00 
    58. 4.576e+00 1.660e+01 2.013e+01] 
    59.  
    60. 邻接矩阵的特征值: 
    61. [12.068+0.000e+00j 2.588+0.000e+00j -7.219+0.000e+00j -4.925+0.000e+00j 
    62. -1.513+0.000e+00j 1. +0.000e+00j -0.5 +2.393e-17j -0.5 -2.393e-17j 
    63. 0. +0.000e+00j] 
    64.  
    65. 无向图的代数连通性: 
    66. 0.0 
    67.  
    68. 图的光谱排序: 
    69. ['4', '2', '1', '0', '5', 'b', 'c', 'a', '3'] 

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

  • 相关阅读:
    分支可以类型的多态实现
    c#中使用了using自动释放资源,如果在using中被return或者异常终止,也会继续执行dispose函数的
    C# 数组的Clone
    pg_dump备份数据结构及数据
    SpringBoot使用MockMVC单元测试Controller
    Docker连接私服
    Windows安装Docker
    项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde
    剑指Offer对答如流系列
    剑指Offer对答如流系列
  • 原文地址:https://www.cnblogs.com/wushaogui/p/9206264.html
Copyright © 2020-2023  润新知