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

はしくれエンジニアもどきのメモ

情報・Web系技術の勉強メモ・備忘録です。

Python (NumPy) でLifeGame を作る3[matplotlibで可視化]

matplotlib Python Jupyter

Python (NumPy) でLifeGame を作る3[matplotlibで可視化]

行列を表示しても見づらいので、matplotlibで可視化してみました。

前回:

cartman0.hatenablog.com

環境

  • Windows 10

    • conda 4.05

      • python 3.5.1

      • jupyter 4.1.0

      • matplotlib 1.5

コード

描画するpltメソッドを追加。

LifeGameのクラスファイル(matplotlibで可視化)

matplotlib のanimaion をgifで保存するには、imagemagickが必要です。

cartman0.hatenablog.com

実行例

Tテトロミノ


CELLS_WIDTH = 11
cells = np.zeros((CELLS_WIDTH, CELLS_WIDTH), 'int')
cells[int(CELLS_WIDTH/2), 4:7] = 1
cells[int(CELLS_WIDTH/2)+1, 5:6] = 1
print(cells)

[[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 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 1 1 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 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]]

上の初期セルをセットして、20回まわすと以下のパターンが見れる。


lg = LifeGame(cells)
lg.plt_anime(20, save_file='t-tetoromino.gif')

以下、gif画像。 ずっと動き続けるので注意

Tテトロミノ → 交通信号

ミツバチの巣箱(beehive)

今度は、ミツバチの巣箱というパターンです。


CELLS_WIDTH = 17
cells = np.zeros((CELLS_WIDTH, CELLS_WIDTH), 'int')
cells[int(CELLS_WIDTH/2)-1, int(CELLS_WIDTH/2)-1:int(CELLS_WIDTH/2)+2] = 1
cells[int(CELLS_WIDTH/2)+1, int(CELLS_WIDTH/2)-1:int(CELLS_WIDTH/2)+2] = 1
cells[int(CELLS_WIDTH/2), int(CELLS_WIDTH/2)-2] = 1
cells[int(CELLS_WIDTH/2), int(CELLS_WIDTH/2)+2] = 1
print(cells)

[[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]
[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]
[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]
[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 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 1 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 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 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 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]

25回ほど回すと、4つに分岐し収束します。


lg = LifeGame(cells)
lg.plt_anime(25, save_file='beehive.gif')
ミツバチの巣箱