ScipyのバージョンによってはNetworkxで正常にグラフを作ることができなかった
auです。
ファイルを受け取り、その中身の隣接行列を作成するという問題がありました。その際に、意味不明なグラフができてしまったので、解決策を忘れないようにメモしておきたいと思います。
Networkxを用いてアルゴリズムの問題を解こうとした際に、Scipyモジュールが入っていないというエラーが出てしまったので、インストールしました。
この時、それぞれのモジュールのバージョンは
networkx==2.3 scipy==1.3.0 // DLした際の最新
そして、以下のファイルをnetworkxを利用して読み込み、隣接行列を作ってみる
//読み込むファイル 0 3 0 5 0 7 1 4 1 6 2 8 2 10 2 11 3 4 4 5 5 6 5 8 6 9 7 8 7 10 8 9 9 11
G = nx.read_edgelist('hogehoge', create_using=nx.DiGraph(), nodetype=int) a = nx.adjacency_matrix(G, weight=None) a = a.todense() a = a.astype(float)
とし、出力してみると・・・
[0. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0.] [0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]]
ん〜おかしい・・・教授や友人の力を借りて、以下のように修正すれば大丈夫と知りました。
n = nx.number_of_nodes(G) a = nx.adjacency_matrix(G, nodelist=range(n), weight=None)
あとは上のコードと同様に、行列を作成して出力します。
[[0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 1.] [0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
思っていた通りのものが出力されました。
nodelistにGのノード数を指定することで解決できたのですが、正直なぜこうなるかは調べてみてもよくわかりませんでした・・・。分かる方がいらっしゃいましたら、ぜひコメントで教えていただきたいです。