【问题标题】:Outputting Images in Jupyter Notebook在 Jupyter Notebook 中输出图像
【发布时间】:2018-04-10 00:28:52
【问题描述】:

以下代码能够在 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()

【问题讨论】:

    标签: image scipy ipython jupyter


    【解决方案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_ 方法。这就是笔记本调用以生成您实际看到的图像的内容。无论出于何种原因(我相信您可以通过深入研究文档来发现),只要对toimage 的调用在单元格的顶部范围内产生任何实例x,笔记本就会自动调用x._repr_png_()。但是,如果toimage 在更深的嵌套范围内运行,则不会自动调用_repr_png_。相反,您必须通过显式调用 display.display_png 来手动使用相同的显示机制。

    【讨论】:

    • 我用它编写了一个用于图像机器学习的函数,当我无法进行函数式编程时,我讨厌它。但现在我可以了,谢谢你。
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多