如何在IPython笔记本中缓存?
环境:如何在IPython笔记本中缓存?,python,r,ipython,knitr,ipython-notebook,Python,R,Ipython,Knitr,Ipython Notebook,环境: Python 3 伊皮顿3.2 每次我关闭IPython笔记本并重新打开它时,我都必须重新运行所有的单元。但有些单元涉及密集的计算 相比之下,默认情况下,R中的knitr会将结果保存在缓存目录中,这样只有新代码和新设置才会调用计算 我查看了ipycache,但它似乎在缓存一个单元格而不是笔记本。IPython中是否有与knitr的缓存相对应的缓存?您能举个例子说明您正在尝试做什么吗?当我在IPython笔记本上运行一些昂贵的东西时,我几乎总是在事后将其写入磁盘。例如,如果我的数据是J
- Python 3
- 伊皮顿3.2
knitr
会将结果保存在缓存目录中,这样只有新代码和新设置才会调用计算
我查看了
ipycache
,但它似乎在缓存一个单元格而不是笔记本。IPython中是否有与knitr的缓存相对应的缓存?您能举个例子说明您正在尝试做什么吗?当我在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')
不幸的是,似乎没有自动缓存那么方便。
%store
magic选项已关闭,但需要手动显式执行缓存和重新加载
在您的Jupyter笔记本中:
现在,假设您关闭笔记本,内核重新启动。您不再有权访问局部变量。但是,您可以使用-r
选项重新加载存储的变量
%store -r a
print a # Should print 1
事实上,您要求的功能已经存在,无需通过执行转储来手动重新实现它 您可以使用%store或更好的%%cache magic(扩展名)来存储这些间歇单元格的结果,这样就不必重新计算它们(请参阅) 这很简单:
%load_ext ipycache
然后,在单元格中,例如:
%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2
第一次执行此单元格时,将执行代码,并且
变量var1和var2保存在当前数据库中的mycache.pkl中
目录以及输出。仅保存丰富的显示输出
如果您使用IPython的开发版本。当你执行这个
单元格,代码被跳过,变量从
文件,并将其注入命名空间,输出将在
笔记本
它会保存所有图形、生成的输出以及自动为您指定的所有变量:)使用
这将计算一些慢计算(一些“参数”)一次。在随后的调用中,它从存储中恢复myVar
实际上,它与公认的答案几乎相同。我不知道Ipython是否有这样的功能,但你可以简单地将昂贵的计算缓存到磁盘上,例如。我尝试将机器学习模型应用于数据集。例如,我通过pandas导入了一些数据(几百MB),然后通过scikit learn训练和测试了两个模型。我想“缓存”所有中间转换的数据帧,以及经过训练的模型。这样我就可以在中间数据帧上“进行”实验,而无需从地面读取。@zelong好的,你应该使用
joblib
来pickle你的sklearn
模型。见我的编辑上面。要将数据帧写入磁盘,只需使用dataframe.to_csv('yourfile.csv)
非常感谢。scikit学习模型的酸洗看起来相当不错。我尝试了很多关于数据帧的争论,似乎需要将一堆中间数据帧保存到csv文件中。但是IPython似乎没有提供与RData
缓存相对应的缓存,它将所有内容都放在一个多维数据集中。我删除了file.close()
调用,因为带有。另外:由于数据
是一个“列表”,因此可以更简单地执行json.dump(数据,文件)
,而不需要任何循环。同样地,json.load(file)
。非常有用,而且比%autoreload
更容易为我工作(我的另一种方法是修改模块,但不想重新加载数据)ipycache
似乎需要很多爱。警告太多了,最后一次更新是2016年5月。该死,它过去维护率很低:我想随着python版本的发展,情况会发生变化。。。仍然有一些美好的回忆,我找到的最好的解决方案是找到更好/更活跃的东西。%store
有什么区别?ipycache
不再被维护,你知道另一个工具吗?这在两个不同的笔记本电脑之间有效吗?似乎是这样
%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2
%cache myVar = someSlowCalculation(some, "parameters")