學過線性代數的都了解矩陣,在矩陣上的文章可做的很多,什么特征矩陣,單位矩陣等.grpah存儲可以使用矩陣,比如graph的鄰接矩陣
,權重矩陣
等,這節主要是在等到graph后,如何快速得到這些信息.詳細官方文檔在這里
目錄:
注意:如果代碼出現找不庫,請返回第一個教程,把庫文件導入.
10線性代數相關
10.1圖矩陣
- #定義圖的節點和邊
- nodes=['0','1','2','3','4','5','a','b','c']
- 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)]
- plt.subplots(1,2,figsize=(10,3))
- #定義一個無向圖和有向圖
- G1 = nx.Graph()
- G1.add_nodes_from(nodes)
- G1.add_weighted_edges_from(edges)
- G2 = nx.DiGraph()
- G2.add_nodes_from(nodes)
- G2.add_weighted_edges_from(edges)
- pos1=nx.circular_layout(G1)
- pos2=nx.circular_layout(G2)
- #畫出無向圖和有向圖
- plt.subplot(121)
- nx.draw(G1,pos1, with_labels=True, font_weight='bold')
- plt.title('無向圖',fontproperties=myfont)
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.subplot(122)
- nx.draw(G2,pos2, with_labels=True, font_weight='bold')
- plt.title('有向圖',fontproperties=myfont)
- plt.axis('on')
- plt.xticks([])
- plt.yticks([])
- plt.show()
- #控制numpy輸出小數位數
- import numpy as np
- np.set_printoptions(precision=3)
- #鄰接矩陣
- A = nx.adjacency_matrix(G1)
- print('鄰接矩陣:\n',A.todense())
- #關聯矩陣
- I = nx.incidence_matrix(G1)
- print('\n關聯矩陣:\n',I.todense())
- #拉普拉斯矩陣
- L=nx.laplacian_matrix(G1)
- print('\n拉普拉斯矩陣:\n',L.todense())
- #標准化的拉普拉斯矩陣
- NL=nx.normalized_laplacian_matrix(G1)
- print('\n標准化的拉普拉斯矩陣:\n',NL.todense())
- #有向圖拉普拉斯矩陣
- DL=nx.directed_laplacian_matrix(G2)
- print('\n有向拉普拉斯矩陣:\n',DL)
- #拉普拉斯算子的特征值
- LS=nx.laplacian_spectrum(G1)
- print('\n拉普拉斯算子的特征值:\n',LS)
- #鄰接矩陣的特征值
- AS=nx.adjacency_spectrum(G1)
- print('\n鄰接矩陣的特征值:\n',AS)
- #無向圖的代數連通性
- AC=nx.algebraic_connectivity(G1)
- print('\n無向圖的代數連通性:\n',AC)
- #圖的光譜排序
- SO=nx.spectral_ordering(G1)
- print('\n圖的光譜排序:\n',SO)
- #兩個矩陣的解釋看:https://blog.csdn.net/Hanging_Gardens/article/details/55670356

圖矩陣示例
輸出:
- 鄰接矩陣:
- [[0. 0. 0. 0. 5. 0. 0. 0. 6. ]
- [0. 0. 0. 2. 0. 0. 0. 0. 0. ]
- [0. 0. 0. 0. 0. 0.5 0.5 0. 0. ]
- [0. 2. 0. 1. 1. 0. 0. 0. 0. ]
- [5. 0. 0. 1. 0. 0. 0. 0. 7. ]
- [0. 0. 0.5 0. 0. 0. 0.5 0. 0. ]
- [0. 0. 0.5 0. 0. 0.5 0. 0. 0. ]
- [0. 0. 0. 0. 0. 0. 0. 0. 0. ]
- [6. 0. 0. 0. 7. 0. 0. 0. 0. ]]
- 關聯矩陣:
- [[1. 1. 0. 0. 0. 0. 0. 0. 0.]
- [0. 0. 1. 0. 0. 0. 0. 0. 0.]
- [0. 0. 0. 1. 1. 0. 0. 0. 0.]
- [0. 0. 1. 0. 0. 1. 0. 0. 0.]
- [0. 1. 0. 0. 0. 1. 0. 1. 0.]
- [0. 0. 0. 1. 0. 0. 0. 0. 1.]
- [0. 0. 0. 0. 1. 0. 0. 0. 1.]
- [0. 0. 0. 0. 0. 0. 0. 0. 0.]
- [1. 0. 0. 0. 0. 0. 0. 1. 0.]]
- 拉普拉斯矩陣:
- [[11. 0. 0. 0. -5. 0. 0. 0. -6. ]
- [ 0. 2. 0. -2. 0. 0. 0. 0. 0. ]
- [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ]
- [ 0. -2. 0. 3. -1. 0. 0. 0. 0. ]
- [-5. 0. 0. -1. 13. 0. 0. 0. -7. ]
- [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ]
- [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ]
- [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
- [-6. 0. 0. 0. -7. 0. 0. 0. 13. ]]
- 標准化的拉普拉斯矩陣:
- [[ 1. 0. 0. 0. -0.418 0. 0. 0. -0.502]
- [ 0. 1. 0. -0.707 0. 0. 0. 0. 0. ]
- [ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ]
- [ 0. -0.707 0. 0.75 -0.139 0. 0. 0. 0. ]
- [-0.418 0. 0. -0.139 1. 0. 0. 0. -0.538]
- [ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ]
- [ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ]
- [ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
- [-0.502 0. 0. 0. -0.538 0. 0. 0. 1. ]]
- 有向拉普拉斯矩陣:
- [[ 0.889 -0.117 -0.029 -0.087 -0.319 -0.029 -0.029 -0.129 -0.242]
- [-0.117 0.889 -0.026 -0.278 -0.051 -0.026 -0.026 -0.114 -0.056]
- [-0.029 -0.026 0.994 -0.012 -0.009 -0.481 -0.481 -0.025 -0.01 ]
- [-0.087 -0.278 -0.012 0.757 -0.097 -0.012 -0.012 -0.052 -0.006]
- [-0.319 -0.051 -0.009 -0.097 0.994 -0.009 -0.009 -0.041 -0.434]
- [-0.029 -0.026 -0.481 -0.012 -0.009 0.994 -0.481 -0.025 -0.01 ]
- [-0.029 -0.026 -0.481 -0.012 -0.009 -0.481 0.994 -0.025 -0.01 ]
- [-0.129 -0.114 -0.025 -0.052 -0.041 -0.025 -0.025 0.889 -0.045]
- [-0.242 -0.056 -0.01 -0.006 -0.434 -0.01 -0.01 -0.045 0.994]]
- 拉普拉斯算子的特征值:
- [-1.436e-15 0.000e+00 4.610e-16 7.000e-01 1.500e+00 1.500e+00
- 4.576e+00 1.660e+01 2.013e+01]
- 鄰接矩陣的特征值:
- [12.068+0.000e+00j 2.588+0.000e+00j -7.219+0.000e+00j -4.925+0.000e+00j
- -1.513+0.000e+00j 1. +0.000e+00j -0.5 +2.393e-17j -0.5 -2.393e-17j
- 0. +0.000e+00j]
- 無向圖的代數連通性:
- 0.0
- 圖的光譜排序:
- ['4', '2', '1', '0', '5', 'b', 'c', 'a', '3']
后面還有兩個小節,由於對圖論算法不是很明白,所以先講明白算法原理,再使用networkX實現,如無須讀算法,可以跳過算法原理部分.