使用 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)