繁体   English   中英

如何在 IPython Notebook 中缓存?

[英]How to cache in IPython Notebook?

环境:

  • 蟒蛇 3
  • IPython 3.2

每次我关闭 IPython notebook 并重新打开它时,我都必须重新运行所有单元格。 但是一些单元格涉及密集的计算。

相比之下,R 中的knitr默认将结果保存在缓存目录中,因此只有新代码和新设置才会调用计算。

我查看了ipycache但它似乎缓存了一个单元而不是笔记本。 IPython 中是否有knitr缓存的对应物?

事实上,您提出的功能已经存在,无需通过执行转储手动重新实现它。

您可以使用%store或更好的%% cache magic(扩展名)来存储这些间歇性单元格的结果,因此不必重新计算它们(请参阅https://github.com/rossant/ipycache

它很简单:

%load_ext ipycache

然后,在一个单元格中,例如:

%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2

当您第一次执行此单元格时,代码将被执行,变量var1和var2将与输出一起保存在当前目录的mycache.pkl中。 只有使用IPython的开发版本才会保存丰富的显示输出。 再次执行此单元格时,将跳过代码,从文件加载变量并将其注入命名空间,并在笔记本中恢复输出。

它会保存所有图形,产生的输出以及为您自动指定的所有变量:)

不幸的是,似乎没有像自动缓存那样方便的东西。 %store magic选项已关闭,但需要您手动和显式地执行缓存和重新加载。

在你的Jupyter笔记本中:

a = 1
%store a

现在,假设您关闭笔记本并重新启动内核。 您无法再访问本地变量。 但是,您可以使用-r选项重新加载已存储的变量。

%store -r a
print a # Should print 1

使用缓存魔法

 %cache myVar = someSlowCalculation(some, "parameters")

这将计算 someSlowCalculation(some, "parameters") 一次。 在随后的调用中,它从存储中恢复 myVar。

https://pypi.org/project/ipython-cache/

在幕后,它与公认的答案几乎相同。

你能举例说明你想做什么吗? 当我在昂贵的IPython笔记本中运行时,我几乎总是将其写入磁盘后记。 例如,如果我的数据是JSON对象的列表,我将其作为行分隔的JSON格式字符串写入磁盘:

with open('path_to_file.json', 'a') as file:
    for item in data: 
        line = json.dumps(item)
        file.write(line + '\n')

然后,您可以以相同的方式读回数据:

data = []
with open('path_to_file.json', 'a') as file:
    for line in file: 
        data_item = json.loads(line)
        data.append(data_item)

我认为这是一个很好的做法,因为它为您提供了备份。 你也可以使用泡菜做同样的事情。 如果您的数据非常大,您实际上可以通过gzip.open直接写入zip文件。

编辑

要将scikit学习模型保存到磁盘,请使用joblib.pickle

from sklearn.cluster import KMeans

km = KMeans(n_clusters=num_clusters)
km.fit(some_data)


from sklearn.externals import joblib
# dump to pickle
joblib.dump(km, 'model.pkl')

# and reload from pickle
km = joblib.load('model.pkl')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM