airtoxin/ipython-animated-array
こんなやつです。Jupyterも可。
$ pip install ipython-animated-array
でインストールできます。
AnimateArray
クラスのコンストラクタにnumpy.array
の配列を渡しshow()
すると配列の中のそれぞれのnumpy.arrayがアニメーションの1フレームとなり、いい感じにアニメーションしてくれます。
cmap
引数は色付けで、ここにあるやつがだいたい使えます。matplotlibのバージョンの関係で最近追加されたものは対応していません…。
show()にreflesh
引数で数字を渡すとアニメーションの更新間隔が変更できます。デフォルトは1000(ms)です。
本当はgithubの.ipynbプレビューでもアニメーションするようにしたかったのですがjsが動かないのでダメでした…。
from ipython_animated_array import AnimateArray
import numpy as np
initial = np.random.randint(2, size=(10,10))
AnimateArray([initial], cmap='winter').show()
def get_next(current):
next_state = []
for i in range(10):
next_row = []
for j in range(10):
living = current[i-1][j-1] + current[i-1][j] + current[i-1][(j+1)%10] + \
current[i][j-1] + current[i][j] + current[i][(j+1)%10] + \
current[(i+1)%10][j-1] + current[(i+1)%10][j] + current[(i+1)%10][(j+1)%10]
next_row.append(1 if living in (3,4) else 0)
next_state.append(next_row)
return next_state
states = [initial]
current = initial
for i in range(1000):
current = get_next(current)
states.append(np.array(current))
AnimateArray(states, cmap='winter').show(reflesh=400)
こんな感じのコードを実行するとライフゲームっぽいのもすぐに出せます。
以上、正月の進捗でした。