4
下面的代碼使用Python和matplotlib爲康威的生命遊戲創建了一個動畫。Python matplotlib - 在康威生命遊戲動畫中更新數據
我不知道爲什麼我必須做的:與其
grid = newGrid.copy()
mat.set_data(grid)
簡單:
mat.set_data(newGrid)
如何更新與劇情相關的陣列,沒有上述複製?
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
N = 100
ON = 255
OFF = 0
vals = [ON, OFF]
# populate grid with random on/off - more off than on
grid = np.random.choice(vals, N*N, p=[0.2, 0.8]).reshape(N, N)
def update(data):
global grid
newGrid = grid.copy()
for i in range(N):
for j in range(N):
total = (grid[i, (j-1)%N] + grid[i, (j+1)%N] +
grid[(i-1)%N, j] + grid[(i+1)%N, j] +
grid[(i-1)%N, (j-1)%N] + grid[(i-1)%N, (j+1)%N] +
grid[(i+1)%N, (j-1)%N] + grid[(i+1)%N, (j+1)%N])/255
if grid[i, j] == ON:
if (total < 2) or (total > 3):
newGrid[i, j] = OFF
else:
if total == 3:
newGrid[i, j] = ON
grid = newGrid.copy()
mat.set_data(grid)
return mat
fig, ax = plt.subplots()
mat = ax.matshow(grid)
ani = animation.FuncAnimation(fig, update, interval=50,
save_count=50)
plt.show()
輸出似乎是正確的 - 我可以看到滑翔機,以及其他預期的模式:
只是一個注意,'blit = True'在OS X上崩潰... –