すべてN+=
ライン後print(N)
の行を追加し、さまざまなZ
配列を試してみてください。例えば
が中央に1Sのブロックと小z
を定義:関数へ
In [29]: z = np.zeros((10,10),int)
In [31]: z[4:6,4:6]=1
In [34]: z[4:8,5]=1
In [35]: z
Out[35]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[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, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 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]])
パスを:
In [36]: iterate(z)
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 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. 2. 2. 1. 0. 0. 0.]
[ 0. 0. 0. 2. 3. 3. 2. 0. 0. 0.]
[ 0. 0. 0. 2. 4. 4. 3. 0. 0. 0.]
[ 0. 0. 0. 1. 4. 3. 3. 0. 0. 0.]
[ 0. 0. 0. 0. 2. 1. 2. 0. 0. 0.]
[ 0. 0. 0. 0. 1. 1. 1. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
N
は、近隣の数をカウントしました1.自分で数をチェックしてください。
Out[36]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[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, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 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]])
さまざまなパターンを試し、繰り返しを繰り返し、パターンの変化を見てください。一部のようなラインでは、離れた注文ファッション、いくつかの「まばたき」の一部の動き、等
ダイ:
N[1:, 1:] += Z[:-1, :-1]
RHS(ここでは9×9)の左上部分です。 LHSは右下がり、再び9x9です。 8つの近隣(3x3ブロック内で中心を引いたもの)を計算すると、8つのN+=
という式があります。このオフセットスライスを使用すると、一度にZ
のすべてのポイントのカウントを行うことができます。
開始のために、1行の配列は
In [47]: z = np.zeros((1,10),int)
In [49]: z[0,4:7]=1
In [50]: z
Out[50]: array([[0, 0, 0, 0, 1, 1, 1, 0, 0, 0]])
In [51]: iterate(z)
[[ 0. 0. 0. 1. 1. 2. 1. 1. 0. 0.]]
Out[51]: array([[0, 0, 0, 0, 0, 1, 0, 0, 0, 0]])
を視覚化する方が簡単かもしれない私はこれがあることz
のすべてのエッジの値が0
ている場合は、この配列はglider
を作成する最高の作品だと思いますhttps://en.wikipedia.org/wiki/Glider_(Conway%27s_Life)
In [64]: z = np.zeros((10,10),int)
In [65]: z[1,2]=1;z[2,3]=1;z[3,1:4]=1
にアニメーションあなたは(https://docs.scipy.org/doc/numpy-1.13.0/reference/arrays.indexing.html)[マニュアルを読む]を試みたことがありますか? –