Клеточные автоматы - повторное моделирование imshow () - PullRequest
0 голосов
/ 23 марта 2019

У меня проблема с повторением анимации.Я хочу использовать matplotlib для визуализации каждого моделирования на матрице.Вот код для симуляции:

import numpy as np
from matplotlib import pyplot as plt

s = np.array([[1,1,1], [1,10,1], [1,1,1]], dtype=np.int8) #Matrix of wages
e = np.zeros((19,), dtype=np.int8) # Vector of rules
e[3]=1
e[12]=1
e[13]=1

mama = np.array([[1, 0, 1], [0, 1, 0], [0, 0, 1]], dtype=np.int8) #The matrix to be tested

def simulation(ma): #Simulation on a given matrix

    n, m = ma.shape
    p = np.zeros((n+2, m+2), dtype=np.int8) #Creates an extended matrix, avoiding conflicts at the edges of the initial matrix. Here I construct a torus
    p[1:-1, 1:-1] = ma #middle
    p[0, 1:-1] = ma[n-1] #the first row of p, the last of ma
    p[-1, 1:-1] = ma[0] #the last row of p, the first of ma
    p[1:-1, 0] = ma[0:, -1] #left col p, right of ma
    p[1:-1, -1] = ma[0:, 0] #right col of p, left of ma
    p[-1, 0] = ma[0, -1] #left bottom corner
    p[-1, -1] = ma[0, 0] #right bottom corner
    p[0, 0] = ma[-1, -1] #left upper corner
    p[0, -1] = ma[-1, 0] #right upper corner

    new = np.zeros(ma.shape, dtype=np.int8)

    v, c = p.shape #verses and columns

    for i in range(1, v):
        for j in range(1, c):
            if p[i-1:i+2, j-1:j+2].shape == (3, 3):
                new[i-1, j-1] = e[np.sum(p[i-1:i+2,j-1:j+2]*s)]
    return new

Однако я хочу запустить симуляцию с указанным числом повторений и визуализировать каждый шаг симуляции, поэтому я попробовал код:

def rep(fun, mac, ti): #function, matrix, repetitions (time)
    if ti == 1:
        plt.imshow(fun(mac))
        plt.title("Celllar automaton")
        plt.show()

    else:
        f = fun(rep(fun, mac, ti-1))
        plt.imshow(f)
        plt.title("Cellular automaton")
        plt.show()

Я получаю сообщение об ошибке:

n, m = ma.shape
AttributeError: 'NoneType' object has no attribute 'shape'

Пожалуйста, не могли бы вы мне помочь?Я очень устал от своей неспособности визуализировать свою работу.

ДОПОЛНИТЕЛЬНО: Я заменил rep на:

def shoow(fig):
    plt.imshow(fig)
    plt.title("Cellular automaton")
    plt.show()

def repet(fun, mac, ti):
    c1 = mac
    for i in range(ti):
        f = fun(c1)
        shoow(f)
        c1 = f

Однако он создает каждый раз новую фигуру.Как я могу получить непрерывную симуляцию?

...