鄰接矩陣、度矩陣

希望每天漲粉發表於2021-12-07

鄰接矩陣(Adjacency)

     鄰接矩陣表示頂點間關係,是 n 階方陣(n為頂點數量)。
     鄰接矩陣分為有向圖鄰接矩陣和無向圖鄰接矩陣。無向圖鄰接矩陣是對稱矩陣,而有向圖的鄰接矩陣不一定對稱。

    $[A(\mathcal{G})]_{i j}=\left\{\begin{array}{l}1 \text { if } v_{i} v_{j} \in E \\0 \text { otherwise }\end{array}\right.$

度矩陣(Degree)

     度矩陣是對角陣,對角上的元素為各個頂點的度。頂點 $v_i$ 的度表示和該頂點相關聯的邊的數量。
     無向圖中頂點 $v_i$ 的度 $d(v_i)=N(i)$。

      

 

  Figure 2.1 的度矩陣和鄰接矩陣如下:

    

  $A=D^{-1} S$,其中D是度矩陣,S是鄰接矩陣。

  度矩陣的逆剛好是其數值的倒數,乘以矩陣等於該度矩陣的水平方向的平均值,加起來等於一。乘以節點輸入層相當於對其做了各平均,避免計算過程中數值過大(鄰接節點的和)。

import numpy as np
Degree = np.array([[1,0, 0,0,0], [0,3, 0,0,0],[0,0, 3,0,0],[0,0, 0,2,0],[0,0, 0,0,3],])
Adj = np.array([[0,1, 0,0,0], [1,0, 1,0,1],[0,1, 0,1,1],[0,0, 1,0,1],[0,1, 1,1,0],])
invD = np.linalg.inv(Degree)
print("invD =\n",invD )
print("Adj =\n",Adj )
print("np.matmul(invD,A) =\n",np.matmul(invD,Adj))

結果:

invD =
[[1. 0. 0. 0. 0. ]
[0. 0.33333333 0. 0. 0. ]
[0. 0. 0.33333333 0. 0. ]
[0. 0. 0. 0.5 0. ]
[0. 0. 0. 0. 0.33333333]]
Adj =
[[0 1 0 0 0]
[1 0 1 0 1]
[0 1 0 1 1]
[0 0 1 0 1]
[0 1 1 1 0]]
np.matmul(invD,A) =
[[0. 1. 0. 0. 0. ]
[0.33333333 0. 0.33333333 0. 0.33333333]
[0. 0.33333333 0. 0.33333333 0.33333333]
[0. 0. 0.5 0. 0.5 ]
[0. 0.33333333 0.33333333 0.33333333 0. ]]

相關文章