pickle.dump
しようとしたら,
OverflowError: cannot serialize a bytes object larger than 4 GiB
とエラーが出た.どうやらpickle
は4GBのデータまでしか扱えないみたい...
pickle
しようとしていたデータはnumpy
(以後np
と表記)の配列だったので,
np
のメソッドで同じように保存できるみたい.
試しにやってみるとnp
のメソッドなら4GB以上のデータがnpyファイルで保存できた.
中々こんなことはないと思うが,
例えば機械学習器に食わせるデータが膨大ってときはpickle
よりもnp
のメソッドで保存した方が良い,
良いというよりnp
のメソッドでないと扱えない.
んで,そのメソッドがnp.save
とのこと.
- 保存
pickle.dump(4GB以下のデータ,openで開いたファイル)
np.save(ファイルパス,numpyデータ)
- 読み込み
pickle.load(openで開いたファイル)
np.load(ファイルパス)
(ファイルパスでなくopenで開いたファイルを指定してもいい)
pickle
の場合,with open
構文の中で使わないといけないから2行書く羽目になるが,
np.save
だと一行で済むので書く手間が省けるナァ~
ただ,np
のメソッドで出力したファイルの拡張子は.npy
になる.
.pickle
でもいいみたいだけど,ここは区別して.npy
にしたほうがいいだろうな.
また,当然np.save
はnp
のデータ(numpy配列や行列)が対象なので,
例えばscikit-learn
とかでそのデータをもとにモデルを作った際にモデルの保存はpickle
ってことになる.
もしかしたらscikit-learn
でも保存メソッドがあるかもしれないがここでは触れない.