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

Posted

技术标签:

【中文标题】使用 matplotlib imshow 在 for 循环中显示 numpy 数组【英文标题】:Display numpy array in a for loop using matplotlib imshow 【发布时间】:2014-11-06 21:43:43 【问题描述】:

我有一个 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 = 火灾。

在每个时间步(迭代):

    一棵树被丢弃在一个随机选择的地点,如果该地点空闲,则种植这棵树 一棵树点燃的概率为 f

我想使用颜色图来显示数组,以可视化我的模型的演变

【问题讨论】:

只是一个旁注,你为什么不做类似a += np.ones(a.shape)的事情? 是的,我可以这样做,但我写下这个数组和这个 for 循环只是为了解释我的问题。这不是我正在处理的实际代码:) 【参考方案1】:

imshow(a) 会将数组 a 的值绘制为像素值,但不会显示该图。每次for循环迭代后查看图片,需要添加show()

这应该做你想做的:

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

【讨论】:

必需的导入语句:from matplotlib.pyplot import imshow, show

以上是关于使用 matplotlib imshow 在 for 循环中显示 numpy 数组的主要内容,如果未能解决你的问题,请参考以下文章

在 python (Matplotlib) 中使用 subplot 和 imshow 时删除白色边框

OpenCV 函数学习04-用 matplotlib 显示图像(plt.imshow)

Matplotlib:带有第二个 y 轴的 imshow

Python matplotlib imshow

matplotlib (imshow) 中的每个块应该如何被点击?

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