以下代码能够按照Jupyter笔记本中的预期打印/输出图像:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display
from scipy.misc import toimage
import numpy as np
n = 3
for _ in range(n):
(toimage(np.random.rand(32, 32, 3)))
print("----------------------------")
然而,一旦我把它放在一个函数中,它就会停止工作。为什么?我该如何解决?
def print_images(n=3):
for _ in range(n):
(toimage(np.random.rand(32, 32, 3)))
print("----------------------------")
print_images()
答案 0 :(得分:1)
display.display_png
有效:
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
from IPython import display
from scipy.misc import toimage
import numpy as np
n = 3
for _ in range(n):
display.display_png(toimage(np.random.rand(32, 32, 3)))
print("----------------------------")
def print_images(n=3):
for _ in range(n):
display.display_png(toimage(np.random.rand(32, 32, 3)))
print("----------------------------")
print_images()
您可以在docs for IPython's display
module。
toimage
返回的对象采用_repr_png_
方法。这是笔记本调用以生成您实际看到的图像的内容。无论出于何种原因(我确信你可以通过挖掘文档来发现),只要对x._repr_png_()
的调用在顶部范围内产生任何实例toimage
,笔记本就会自动调用x
一个细胞。但是,如果toimage
在更深层嵌套的范围内运行,则不会自动调用_repr_png_
。相反,您必须通过显式调用display.display_png
来手动使用相同的显示设备。