個人的に使い方に困ったpythonライブラリnetworkxの紹介をしたいと思います。
今回はとりあえずPart1ということで、発見があり次第、都度更新していこうと思います。
(間違ってたらすいません🙏)
# networkxライブラリをインポートする。
import networkx as nx
networkxがインストールされてないと、エラーが出るかもしれないです。その場合は以下の文言をターミナルで実行すれば解消すると思います。
\pip install networkx
とりあえず使ってみる
N_x = 5 # N_x:ノード数
m = 3 # m:結合数
t = 0 # シード値
# グラフを作成
graph = nx.gnm_random_graph(N_x, m, t)
graphの型を確認してみる。
type(graph)
==> networkx.classes.graph.Graph
個人的には初めて見た型でした、、
次に実際にgraphを描写してみます。
nx.draw_networkx(graph)
plt.show()
結果は以下のようになります。ノード数:5, 結合数:4になっていることが確認できます。
次にノード数は変えず(N_x = 5)、結合数を全結合に変更してみます。
N_x = 5
m = N_x*(N_x-1) # 全結合は(N_x)×(N_x-1)
t = 0
graph_all = nx.gnm_random_graph(N_x, m, t)
先ほど同様に描写してみます。
nx.draw_networkx(graph_all)
plt.show()
結果は以下のようになります。ノード間が全て結合できていることが確認できます。
実際にgraphやgraph_allって中身どうなってるの?って疑問が湧きました。
そこで、graphやgraph_allの中身を見てみます。
中身を見るために、array型に変換します。(他の方法があるかもしれないですが、、、)
# 型をarrayに変換する
graph_array = nx.to_numpy_array(graph)
graph_all_array = nx.to_numpy_array(graph_all)
graph_array
==>>
[[0. 0. 1. 0. 0.]
[0. 0. 0. 0. 1.]
[1. 0. 0. 1. 0.]
[0. 0. 1. 0. 1.]
[0. 1. 0. 1. 0.]]
graph_all_array
==>>
[[0. 1. 1. 1. 1.]
[1. 0. 1. 1. 1.]
[1. 1. 0. 1. 1.]
[1. 1. 1. 0. 1.]
[1. 1. 1. 1. 0.]]
中身を見ると、graphの正体は結合行列でした。
結合があれば"1" 結合がなければ"0" になっています。
networkxを使うと対称行列になってしまうのが少し不便かなと感じました(勘違いかもですが、、)