环境:
- Python 3
- IPython 3.2
每次关闭并重新打开一个IPython笔记本时,我都必须重新运行所有单元格。但是有些单元格涉及密集的计算。
相比之下,R中的knitr
默认将结果保存在缓存目录中,因此只有新代码和新设置才会调用计算。
我看了一下ipycache
,但它似乎只缓存一个单元格而不是整个笔记本。是否存在与IPython中的knitr
缓存相对应的缓存方式?
环境:
每次关闭并重新打开一个IPython笔记本时,我都必须重新运行所有单元格。但是有些单元格涉及密集的计算。
相比之下,R中的knitr
默认将结果保存在缓存目录中,因此只有新代码和新设置才会调用计算。
我看了一下ipycache
,但它似乎只缓存一个单元格而不是整个笔记本。是否存在与IPython中的knitr
缓存相对应的缓存方式?
不幸的是,似乎没有像自动缓存这样方便的东西。 %store
魔术选项很接近,但需要您手动和明确地进行缓存和重新加载。
a = 1
%store a
现在,假设你关闭笔记本并重新启动内核。你将无法再访问局部变量。但是,你 可以 使用 -r
选项重新加载你已存储的变量。
%store -r a
print a # Should print 1
%load_ext ipycache
然后,在一个单元格中,例如:
%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2
%autoreload
更容易使用(这是我绕过更改模块但不想重新加载数据的另一种方式)。 - ijoseph%store
有什么不同? - BND%store
(但现在打算使用:))好久没用ipycache
了...如果记忆没错,它可以保存单元格的所有图形输出等以及变量的值。此外,您只需说出一个单元格被缓存以及输出变量即可。如果从缓存时起未编辑单元格,则使用缓存,可以处理多个变量,可以定义变量,如果更改则缓存无效等。它并不完美,但我真的很想再次看到类似的东西。 - ntgipycache
不再维护,你知道其他的工具吗? - Chris_Rands
%cache myVar = someSlowCalculation(some, "parameters")
This will calculate someSlowCalculation(some, "parameters") once. And in subsequent calls it restores myVar from storage.
https://pypi.org/project/ipython-cache/
在幕后,它基本上与被接受的答案做了相同的事情。
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)
一般来说,我认为这是一个很好的实践,因为它提供了备份。您也可以使用pickle做同样的事情。如果数据真的很大,您可以使用gzip.open
直接写入zip文件。
编辑
要将Scikit Learn模型保存到磁盘,请使用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')
joblib
来序列化你的sklearn
模型。请看我上面的修改。而要将你的数据框写入磁盘,只需使用dataframe.to_csv('yourfile.csv)
即可。 - brandomrRData
缓存的对应项,它可以将所有内容放在一个单独的立方体中。 - Zelongdata
是一个“列表”,因此可以更简单地执行json.dump(data, file)
,而不需要任何循环。同样地,也可以使用json.load(file)
。 - Eric O. Lebigot