У меня проблемы с анимацией в matplotlib. Вот весь код:
import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
from scipy.special import factorial
from scipy import linalg
from numba import jit
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from numba import jit
from matplotlib.animation import FuncAnimation
%matplotlib inline
sqrtNspins=10 #generate 2D sample
Amostra2D=np.zeros((sqrtNspins,sqrtNspins))
for i in range (sqrtNspins):
for j in range(sqrtNspins):
Amostra2D[i,j]=np.sign(rd.random()-0.5)
@jit
def Hamiltoniano2D(Amostra2D): #Hamiltonian
N=len(Amostra2D)*len(Amostra2D)
M=np.sum(Amostra2D)
return (N-M)*(N+M)/(2*(N-1))
А теперь важная часть:
@jit
def Exe3(Amos,b,tempos): #random walk function
N=len(Amos)
Amoscorre=np.copy(Amos)
Magnetizacao=np.sum(Amoscorre)
MagnEmCadaTempo=np.zeros(tempos)
Data=np.empty()
for j in range(tempos):
ESTADONOVO=np.copy(Amoscorre)
ESTADONOVO[rd.randint(N),rd.randint(N)]*=(-1) #change a spin
Swag=np.append(Data,ESTADONOVO). #I wanted this to be my array of arrays that give me all states in all times
if rd.random()<min(1,np.exp(-b*(Hamiltoniano2D(ESTADONOVO)-Hamiltoniano2D(Amoscorre)))):
Amoscorre=np.copy(ESTADONOVO)
MagnEmCadaTempo[j]=np.sum(Amoscorre)
fig = plt.figure()
plot =plt.matshow(Swag[0])
def init():
plot.set_data(Swag[0])
return plot
def update(j):
plot.set_data(Swag[j])
return [plot]
anim = FuncAnimation(fig, update, init_func = init, frames=10000, interval = 30, blit=True)
plt.show()
Exe3(Amostra2D,3,100) #beta=1
Я никогда не использовал анимацию matplotlib ипосле прочтения некоторых веб-сайтов я не смог приспособиться к своей функции. Я уже сделал несколько «снимков», создавая matshow для каждого отдельного раза.Большое спасибо, Фернандо