Zel*_*ong 16 python r ipython knitr ipython-notebook
环境:
每当我关闭一个IPython笔记本并重新打开它时,我必须重新运行所有单元格.但是一些细胞涉及密集计算.
相比之下,knitr
在R中默认将结果保存在缓存目录中,因此只有新代码和新设置才会调用计算.
我看了一下,ipycache
但似乎缓存了一个单元而不是笔记本.knitr
在IPython中有缓存的对应物吗?
小智 9
不幸的是,似乎没有像自动缓存那样方便的东西。该%store
魔术选项是关闭的,但需要你做缓存和手动和明确重装。
a = 1
%store a
Run Code Online (Sandbox Code Playgroud)
现在,假设您关闭笔记本并重新启动内核。您不再可以访问局部变量。但是,您可以使用该-r
选项重新加载已存储的变量。
%store -r a
print a # Should print 1
Run Code Online (Sandbox Code Playgroud)
事实上,您要求的功能已经存在,无需通过执行 dumps 手动重新实现它。
您可以使用 %store 或更好的 %%cache 魔法(扩展)来存储这些间歇性单元格的结果,因此不必重新计算它们(请参阅https://github.com/rossant/ipycache )
它很简单:
%load_ext ipycache
Run Code Online (Sandbox Code Playgroud)
然后,在一个单元格中,例如:
%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2
Run Code Online (Sandbox Code Playgroud)
当您第一次执行此单元格时,将执行代码,并且变量 var1 和 var2 与输出一起保存在当前目录的 mycache.pkl 中。仅当您使用 IPython 的开发版本时才会保存丰富的显示输出。再次执行此单元格时,将跳过代码,从文件加载变量并注入命名空间,并在笔记本中恢复输出。
它会保存所有图形、生成的输出以及为您自动指定的所有变量:)
小智 0
你能举例说明你正在尝试做什么吗?当我在 IPython Notebook 中运行一些昂贵的东西时,我几乎总是事后将其写入磁盘。例如,如果我的数据是 JSON 对象列表,我会将其作为行分隔的 JSON 格式字符串写入磁盘:
with open('path_to_file.json', 'a') as file:
for item in data:
line = json.dumps(item)
file.write(line + '\n')
Run Code Online (Sandbox Code Playgroud)
然后您可以以相同的方式读回数据:
data = []
with open('path_to_file.json', 'a') as file:
for line in file:
data_item = json.loads(line)
data.append(data_item)
Run Code Online (Sandbox Code Playgroud)
我认为一般来说这是一个很好的做法,因为它为您提供了备份。你也可以使用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')
Run Code Online (Sandbox Code Playgroud)