web-dev-qa-db-ja.com

異なるjupyterノートブック間で変数を共有する

同じサーバーで実行している2つの異なるJupyterノートブックを持っています。私がしたいことは、1つのノートブックの変数の一部(数個のみ)に他のノートブックを介してアクセスすることです(アルゴリズムの2つの異なるバージョンが同じ結果になるかどうかを比較する必要があります)。これを行う方法はありますか?

ありがとう

28
user22710

2つのjupyterノートブック間では、%storeコマンドを使用できます。

最初のjupyterノートブックで:

data = 'string or data-table to pass'
%store data
del data

2番目のjupyterノートブック:

%store -r data
data

詳細は here を参照してください。

36
chabir

簡単なことだけが必要な場合は、 pickle モジュールを使用してデータを永続化(ファイルに保存)してから、他のノートブックで取得できます。例えば:

import pickle

a = ['test value','test value 2','test value 3']

# Choose a file name
file_name = "sharedfile"

# Open the file for writing
with open(file_name,'wb') as my_file_obj:
    pickle.dump(a,my_file_obj)   

# The file you have just saved can be opened in a different session
# (or iPython notebook) and the contents will be preserved.

# Now select the (same) file to open (e.g. in another notebook)
file_name = "sharedfile"
# Open the file for reading
file_object = open(file_Name,'r')  
# load the object from the file into var b
b = pickle.load(file_object)  

print(b)
>>> ['test value','test value 2','test value 3']
9
alfredoc

これを行うには、同じmagic commandsを使用できます。IPythonノートブックのCell magic%%cacheを使用すると、永続的なピクルファイルに長期にわたる計算の結果と出力をキャッシュできます。ノートブックの一部の計算が長く、結果をファイルに簡単に保存したい場合に役立ちます。

これをノートブックで使用するには、最初にモジュールipycacheをインストールする必要があります。このセルマジックコマンドは組み込みのマジックコマンドではないためです。

次に、モジュールをノートブックにロードします。

%load_ext ipycache

次に、以下を使用してセルを作成します。

%%cache mycache.pkl var1 var2
var1 = 1  # you can put any code you want at there,
var2 = 2  # just make sure this cell is not empty.

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

または、$file_nameの代わりにmycache.pklを使用します。ここで、file_nameは、キャッシュに使用されるファイルへのパスを保持する変数です。

--forceまたは-fオプションを使用して、セルを強制的に実行し、ファイルを上書きします。

--readまたは-rオプションを使用して、セルの実行を防ぎ、常にキャッシュから変数をロードします。ファイルが存在しない場合は、例外が発生します。

ref: ipycache および example notebook のgithubリポジトリ

2
hxysayhi