web-dev-qa-db-ja.com

IPython Notebookにキャッシュする方法は?

環境:

  • Python 3
  • IPython 3.2

IPython Notebookをシャットダウンして再度開くたびに、すべてのセルを再実行する必要があります。ただし、一部のセルには集中的な計算が含まれます。

対照的に、Rのknitrはデフォルトで結果をキャッシュディレクトリに保存するため、新しいコードと新しい設定のみが計算を呼び出します。

ipycacheを見ましたが、ノートブックではなくセルをキャッシュしているようです。 IPythonにknitrのキャッシュに対応するものはありますか?

17
Zelong

あなたがやろうとしていることの例を挙げていただけますか?高価な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.openZipファイルに直接書き込む。

[〜#〜]編集[〜#〜]

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')
0
brandomr

実際、あなたが求める機能はすでに存在しているので、ダンプを実行して手動で再実装する必要はありません。

%storeを使用するか、%% cacheマジック(拡張)を使用して、これらの断続的なセルの結果を保存できるため、再計算する必要はありません( https://github.comを参照)/rossant/ipycache

それは次のように簡単です:

%load_ext ipycache

次に、セル内で例:

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

このセルを最初に実行すると、コードが実行され、変数var1とvar2が出力とともに現在のディレクトリのmycache.pklに保存されます。リッチディスプレイ出力は、開発バージョンのIPythonを使用する場合にのみ保存されます。このセルを再度実行すると、コードがスキップされ、変数がファイルから読み込まれて名前空間に挿入され、出力がノートブックに復元されます。

すべてのグラフィック、生成された出力、および自動的に指定されたすべての変数が保存されます:)

4
ntg

残念ながら、自動キャッシュほど便利なものはないようです。 %storeマジックオプションは近いですが、手動で明示的にキャッシュとリロードを行う必要があります。

Jupyterノートブックの場合:

a = 1
%store a

ここで、ノートブックを閉じてカーネルを再起動するとします。ローカル変数にアクセスできなくなります。ただし、can-rオプションを使用して保存した変数をリロードします。

%store -r a
print a # Should print 1
4
viswajithiii

キャッシュマジック を使用します。

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

これにより、someSlowCalculation(some、 "parameters")が1回計算されます。その後の呼び出しでは、myVarをストレージから復元します。

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

内部的には、受け入れられた答えとほとんど同じです。

0
wotanii