使用matplotlib imshow在for循环中显示numpy数组

时间:2014-09-12 16:36:35

标签: python arrays animation numpy matplotlib

我有一个numpy数组,其元素在for循环中更新:

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

我想在每次迭代时显示数组,但imshow()不起作用,它只是在循环终止时显示图像。

PS。我使用的是Ipython笔记本

我在网上发现了不同的东西,但它们都没有在我的电脑上运行(例如我尝试使用matplotlib的动画模块)

奇怪的是,如果我尝试使用标准的python提示符执行此示例(http://matplotlib.org/examples/animation/dynamic_image2.html)一切正常,而在Ipython笔记本上它不起作用。谁能解释我为什么?

备注:

也许我过度简化了我的代码;

我正在使用森林火灾模型,数组是一个填充0 =空站点的网格,1 =树,2 =火。

在每个时间步骤(迭代):

  1. 在随机选择的网站上放置一棵树,如果该网站是免费的,则种植树
  2. 一棵树以概率f
  3. 点燃

    我想使用色彩图显示数组,以显示模型的演变

2 个答案:

答案 0 :(得分:9)

imshow(a)会将数组a的值绘制为像素值,但不会显示该图。要在for循环的每次迭代后查看图像,您需要添加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

答案 1 :(得分:0)

imshow用于在图中显示图像。使用print显示一个numpy数组:

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

for t in range(0,10):
    print a

    # ...