読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【メモ】networkxで周期境界条件のある格子(トーラス)状のネットワークを作る

複雑ネットワークを使ったシミュレーションをやりたいとき、まずは(周期境界条件のある)格子のネットワーク上でシミュレーションをやってみて、普通の行列を使ったシミュレーションと結果を比べてみたいということはよくあると思います。

そんなときに使えるコードをメモしておきます。

import networkx as nx
import pylab as pl

L = 4
N = L**2

G = nx.Graph()
for x in range(L):
    for y in range(L):
        G.add_edge(x+(y*L),(x+1)%L+(y*L))
        G.add_edge(x+(y*L),(x+(y*L)+L)%N)
nx.draw(G)
pl.show()

結果: f:id:takeshi0406:20141117153118p:plain

もっとわかりやすい形でプロットすれば良かったですね(でも面倒なのでやりません)。

networkxでも grid_2d_graph() という関数が用意されているのですが、周期境界条件が無い&ノードが1,2,3…という番号でなく、 (0,0), (0,1),… みたいな形でタグ付けされるため見送り。

python - Drawing lattices and graphs with Networkx - Stack Overflow