I have a numpy array whose elements are updated in a for loop:
a = np.array([[1,2,3],[4,5,6],[7,8,9]]) for t in range(0,10): imshow(a) for i in range(0,a.shape[0]): for j in range(0,a.shape[1]): a[i][j] += 1
I want to display the array at each iteration, but imshow() doesn’t work, it just displays the image once the loop terminates.
ps. I’m using an Ipython notebook
I found different things on the web but none of them work on my computer (for example I tried to use matplotlib’s animation module)
The strange thing is that if I try to execute this example (http://matplotlib.org/examples/animation/dynamic_image2.html) using the standard python prompt everything works fine, while on the Ipython notebook it doesn’t work. Can anyone explain me why?
notes:
Maybe I oversimplified my code;
I’m working on a forest-fire model, the array is a grid filled with 0 = empty site, 1 = tree, 2 = fire.
At each time step (iteration):
- a tree is dropped on a randomly chosen site and if the site is free the tree is planted
- a tree ignites with a probability f
I want to display the array using a colormap to visualize the evolution of my model
Advertisement
Answer
imshow(a)
will plot the values of the array a as pixel values, but it won’t display the plot. To view the image after each iteration of the for loop, you need to add show()
.
This should do what you want:
from matplotlib.pyplot import imshow, show a = np.array([[1,2,3],[4,5,6],[7,8,9]]) for t in range(0,10): imshow(a) show() for i in range(0,a.shape[0]): for j in range(0,a.shape[1]): a[i][j] += 1