我对下面的代码有什么区别有疑问。我正在使用matplotlib的动画类来渲染numpy的数组。在atualizaMundo()
功能,如果我使用mundo[:] = new_mundo[:]
它工作得很好,但如果我使用mundo=new_mundo
数组相等,但动画不起作用。这里有什么不同?matplotlib和numpy的动画
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
ON = 255
OFF = 0
def criaMundo(N):
return(np.random.choice([ON,OFF],N*N,p=[0.5,0.5]).reshape(N,N))
def atualizaMundo(frameNum,N,mundo,img):
new_mundo = np.random.choice([ON,OFF],N*N,p=[0.5,0.5]).reshape(N,N)
img.set_data(mundo)
mundo[:]=new_mundo[:]
#mundo=new_mundo
return(img,)
def main():
try:
N = 4
mundo = criaMundo(N)
print(mundo)
fig1,ax = plt.subplots()
img = ax.imshow(mundo)
animacao = animation.FuncAnimation(fig1, atualizaMundo, fargs=(N,mundo,img,), blit=True)
plt.show()
except Exception as ex:
pass
if __name__ == '__main__':
try:
main()
except Exception as fk:
pass
虽然https://stackoverflow.com/questions/19676538/numpy-array-assignment-with-copy给出了一些见解,但它并没有回答为什么动画在两种情况下工作方式不同的问题 - 这也是由变量的局部范围。 – ImportanceOfBeingErnest
[Numpy数组赋值与副本]的可能重复(https://stackoverflow.com/questions/19676538/numpy-array-assignment-with-copy) – eyllanesc