環境:
IPython Notebookをシャットダウンして再度開くたびに、すべてのセルを再実行する必要があります。ただし、一部のセルには集中的な計算が含まれます。
対照的に、Rのknitr
はデフォルトで結果をキャッシュディレクトリに保存するため、新しいコードと新しい設定のみが計算を呼び出します。
ipycache
を見ましたが、ノートブックではなくセルをキャッシュしているようです。 IPythonにknitr
のキャッシュに対応するものはありますか?
あなたがやろうとしていることの例を挙げていただけますか?高価なIPythonNotebookで何かを実行するときは、ほとんどの場合、あとがきでディスクに書き込みます。たとえば、データが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ファイルに直接書き込む。
[〜#〜]編集[〜#〜]
Scikitlearnモデルをディスクに保存するには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を使用するか、%% cacheマジック(拡張)を使用して、これらの断続的なセルの結果を保存できるため、再計算する必要はありません( https://github.comを参照)/rossant/ipycache )
それは次のように簡単です:
%load_ext ipycache
次に、セル内で例:
%%cache mycache.pkl var1 var2
var1 = 1
var2 = 2
このセルを最初に実行すると、コードが実行され、変数var1とvar2が出力とともに現在のディレクトリのmycache.pklに保存されます。リッチディスプレイ出力は、開発バージョンのIPythonを使用する場合にのみ保存されます。このセルを再度実行すると、コードがスキップされ、変数がファイルから読み込まれて名前空間に挿入され、出力がノートブックに復元されます。
すべてのグラフィック、生成された出力、および自動的に指定されたすべての変数が保存されます:)
残念ながら、自動キャッシュほど便利なものはないようです。 %store
マジックオプションは近いですが、手動で明示的にキャッシュとリロードを行う必要があります。
a = 1
%store a
ここで、ノートブックを閉じてカーネルを再起動するとします。ローカル変数にアクセスできなくなります。ただし、can-r
オプションを使用して保存した変数をリロードします。
%store -r a
print a # Should print 1
キャッシュマジック を使用します。
%cache myVar = someSlowCalculation(some, "parameters")
これにより、someSlowCalculation(some、 "parameters")が1回計算されます。その後の呼び出しでは、myVarをストレージから復元します。
https://pypi.org/project/ipython-cache/
内部的には、受け入れられた答えとほとんど同じです。