このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

NetworkX(主にDiGraph)の使い方

  1. import networkx as nx していることを仮定する。
  2. import matplotlib.pylab as plt も仮定する。pylabなので、as pylab が良かったか?
  3. pydotとPyYAMLは不要だから入れてない。
  4. A node can be any hashable Python object except None. たいてい何でも使える。
  5. nbunchはNetworkX特有の概念で、頂点集合の表現。とりあえず、リストと思ってもいい。
    An nbunch is any iterable container of nodes
  6. ebunchも同様。An iteratable container of edge tuples



  1. DiGraphが有向グラフで、ループを認める。が、多重辺は認めてないので、多重辺が必要ならMultiDiGraphを使う。辺に属性(例えば多重度)が付けられるので、たいていはDiGraphで間に合いそうだ。
  2. 辺に付けられた数値を重さ(weight)と呼ぶ。辺重さ付きのグラフが「ネットワーク」の定義。最短経路問題などはネットワークに対して定式化される。
  3. 初期化データはいろいろ使える。
    1. edge list
    2. NetworkX graph
    3. NumPy matrix
    4. NumPy 2d ndarray
    5. SciPy sparse matrix
    6. PyGraphviz AGraph
  4. edge listは、辺を表現するタプルのリスト。
  5. やってみたら、DiGraph({1:[2,3], 2:[3, 4]}) もOKだった。
  6. 属性付きの辺は、(u, v, dict) というタプルで、dictは辞書。
  7. グラフ全体、頂点、辺のそれぞれに属性を付けられる。数値属性のどれかを(必要に応じて)weightと呼ぶ。
  8. G.graph でグラフ属性にアクセスできる。
  9. G.node[1] などで頂点属性にアクセスできる。
  10. G[1][2]、G.edge[1] とかで辺属性にアクセスできる。
  11. G[1]は辺属性の辞書。
  12. グラフ描画は、nx.draw(G); plt.show()



  1. 有向グラフを逆転したいなら、reverse()
  2. コピー(クローン)は copy()
  3. 無向グラフとしてコピーなら、to_undirected()。to_undirected(reciprocal=True)とすると、両方向有向辺(辺の対)が無向辺になる。
  4. コンストラクタ G=DiGraph(D) はシャローコピー。to_undirectedはディープコピー。
  5. 頂点の入次数を知りたいなら、in_degree(nbunch) で取れる。nbunchが単一頂点なら数値、頂点集合なら辞書。
  6. in_degreeは辞書を返すが、イテレータを返す in_degree_iterってのもある。
  7. out_degreeも同じ。



  1. order() がノード数
  2. number_of_nodes() でも同じ。
  3. len(G) でもノード数
  4. size() が辺数
  5. number_of_edges() でも同じ。
  6. self loopの情報が詳しく取れる。
    1. nodes_with_selfloops()
    2. selfloop_edges()
    3. number_os_selfloops()
  7. 頂点集合から誘導されるサブグラフは、subgraph(nbunch)で作れる。