はじめに
日本語情報が見当たらなかったので,備忘録としてメモします.
環境
- Python 3.11
- numpy 1.24
- networkx 3.1
方法
import numpy as np
import networkx as nx
# 隣接行列
A = np.array([
[0, 1, 0, 1, 1],
[1, 0, 1, 0, 1],
[0, 1, 0, 0, 1],
[1, 0, 0, 0, 1],
[1, 1, 1, 1, 0]
])
# グラフオブジェクトの生成
G = nx.Graph(A)
# 描画
nx.draw(G)
Appendix
ちなみに,接続行列から直接グラフを生成する方法は存在しない.
そこで,次式を用いることで隣接行列を求めて,グラフを作成すればよい.
$$
\begin{align}
B^\top B &= D - A \\
B^{\prime\top} B^\prime &= D + A
\end{align}
$$
$B$は有向接続行列,$B^\prime$は無向接続行列,$D$は次数行列,$A$は隣接行列である.
以下に例を示す.
# 無向接続行列
B2 = np.array([
[1,1,0,0,0],
[0,1,1,0,0],
[0,0,1,1,0],
[1,0,0,1,0],
[0,1,0,0,1],
[0,0,1,0,1],
[0,0,0,1,1],
[1,0,0,0,1]
])
temp = B2.T@B2 # D + A
D = np.diag(np.diag(temp))
A = temp - D # D + A - D = A
G = nx.Graph(A)
nx.draw(G)