

Python3でSpyderを使っております。  
コードを実行して得られた巨大なサイズの変数をどこかに保存し、呼び出すような方法はあるのでしょうか。  
背景として、数百万行に及ぶ結果が返ってくるようなループ文を書いており、ファイルを変えるたびに当然変数は消えるため、また当初の作業をやり直す際にはこのループ文を再度実行しております。このすでに実行済かつ結果の分かっているループ文に毎度1,2時間取られてしまっております。


CC BY-SA 4.0
2018-11-10T20:49:07.383
50186
2018-11-11T00:32:37.077
30914
question
python python3 spyder
実行結果の変数を簡単に呼び出す方法


Pythonには、pickle(日本語に訳すと漬物)というオブジェクトを高速で保存できるモジュールがあります。  
巨大なサイズの変数を`data`とすると次のようなコードで簡単に保存と読み込みが可能です。  
・ 公式ドキュメント [pickle](https://docs.python.org/ja/3/library/pickle.html)

[code]

    import pickle
    
    with open('data.pickle', 'wb') as f:
        pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)
    
    with open('data.pickle', 'rb') as f:
        data = pickle.load(f)
    
[/code]

巨大なサイズの変数がPandasのDataFrameの場合は、もっと簡単にpickleに保存と読み込みが可能です。

[code]

    df.to_pickle('data.pickle')
    df = pd.read_pickle('data.pickle')
    
[/code]

numpyのndarrayの場合には、独自にバイナリ形式で保存できるようになっているので、それを使ったほうが便利です。以下のコードで試してみると数秒で保存ができ、読み込みの方は1秒もかかりません。pickleを使った場合も、それと同じぐらいの処理時間です。

[code]

    import numpy as np
    
    na = np.random.rand(10000000, 10)
    np.save('data.npy', na)
    # 圧縮したい場合
    # np.savez('data.npz', na)
    
    na = np.load('data.npy')
    
[/code]


CC BY-SA 4.0
2018-11-11T00:32:37.077
50189
2018-11-11T00:32:37.077
15171
50186
answer