jupyter笔记本中的Plotly数据占用了大量内存

时间:2018-03-03 01:27:21

标签: python memory plotly jupyter

我可能正在做一些非常愚蠢的事情,但我一直在使用

在我的jupyter笔记本中使用剧情离线
import plotly.offline as py
py.init_notebook_mode(connected=True)
from plotly.graph_objs import *

我试图显示可以使用滑块导航的一系列图像。具有图像数据的整个numpy阵列是50个图像x 64宽x 64高。

我把它放到我在网上找到的代码拼凑在一起的下面的滑块功能中。返回的Figure对象本身并不是很大。然而,当调用plot iplot时,我的jupyter笔记本在磁盘上的大小(由ls -l测量)非常大 - 就像15 MB一样,即使numpy源数据像1MB。对于更大/更多的数字,这变得难以管理。有谁知道发生了什么?

def slider_ims(imgs):

    imgs = np.flip(imgs,1) 

    data = [dict(
            type='heatmap',
            z = imgs[step,:,:],
            visible = False,
            showscale=False,
            xaxis="x",
            yaxis="y",
            name = 'z = '+str(step)) for step in np.arange(imgs.shape[0])]
    data[0]['visible'] = True


    steps = []
    for i in range(len(data)):
        step = dict(
            method = 'restyle',
            args = ['visible', [False] * len(data)],
            label = str(i)
        )
        step['args'][1][i] = True # Toggle i'th trace to "visible"
        steps.append(step)

    sliders = [dict(
        active = 0,
        currentvalue = {"prefix": "Frame: "},
        pad = {"t": 50},
        steps = steps,
        ticklen = 0,
        minorticklen = 0
    )]

    layout = Layout(
             sliders = sliders,
             font=Font(family='Balto'),
             width=800,
             height=600,
            )


    fig=Figure(data=data, layout=layout)
    py.iplot(fig)
    return fig

2 个答案:

答案 0 :(得分:1)

您想要更小的 ipynb 文件?不要存储输出单元格。

如果您只关心笔记本的磁盘大小,则可以更改 Jupyter 配置以禁用将输出单元写入 ipynb 文件。这意味着只有您的代码保存在磁盘上。每当您打开笔记本时,输出单元格将为空,您需要重新运行笔记本以获取它们。您必须决定这是否适合您使用笔记本的方式。

您可以通过编辑 jupyter_notebook_config.py 配置文件进行设置,该文件通常位于 ~/.jupyter 下的主目录中(Windows:C:\Users\USERNAME\.jupyter\)。如果该文件尚不存在,则可以使用 jupyter notebook --generate-config(更多信息 here)从终端生成此文件。

在这个配置文件中,您需要添加一个预保存钩子,在保存之前剥离输出单元格,如documentation中所述:

def scrub_output_pre_save(model, **kwargs):
    """scrub output before saving notebooks"""
    # only run on notebooks
    if model['type'] != 'notebook':
        return
    # only run on nbformat v4
    if model['content']['nbformat'] != 4:
        return

    for cell in model['content']['cells']:
        if cell['cell_type'] != 'code':
            continue
        cell['outputs'] = []
        cell['execution_count'] = None

c.FileContentsManager.pre_save_hook = scrub_output_pre_save

额外好处:像这样剥离输出单元也是获得源代码控制可读差异的好方法,例如git

答案 1 :(得分:0)

通常情节剧情的情节很大。您的笔记本电脑尺寸增加了,因为您使用内联图(py.iplot)将图表保存在笔记本上。
如果您不希望笔记本电脑如此之大,只需使用普通图(py.plot)并将图保存在另一个文件中。
你可以阅读剧情的文档