私はklepto
著者です。実際に配列をピクルしようとしているだけなら、(配列が大きすぎてメモリの制約内に収まらない場合を除いて)numpy
で組み込みdump
メソッドを使用するのが最善の方法です。array
のように、オブジェクト自体にシリアル化メソッドが組み込まれている場合を除き、シリアル化を行うほとんどすべてのコードは、シリアル化パッケージ ( dill
、cloudpickle
または) のいずれかを使用します。 、および両方を使用し、配列自体が提供する内部シリアライゼーションを利用します(はそれを使用しないため、シリアライゼーションが膨張し、メモリ障害を引き起こす可能性があります)。pickle
numpy
joblib
cloudpickle
cloudpickle
dill
numpy
pickle
>>> import numpy as np
>>> a = np.random.random((1500,1500,1500,1))
>>> a.dump('foo.pkl')
上記の方法でもメモリ エラーが発生する場合はjoblib
、配列を小さなチャンクに分割するかklepto
、(大きな配列データ用に設計された) 配列をdill
潜在的に使用しない限り、dask
上記の最適に効率的な方法を使用しても、配列が十分に大きいため、メモリエラーが発生するはずです(自分のシステムでテストしました)。したがって、配列をチャンクに分割するか、dask
配列として保存する必要があります。 .
明確にklepto
するために、 は配列以外の大きなデータ (テーブルや辞書など) をdask
対象としていますが、 は大きな配列データを対象としています。
別のオプションは、numpy.memmap
メモリをバイパスして配列をファイルに直接書き込む配列を使用することです。これらは使用するのが少し複雑dask
で、シンプルなインターフェースであなたのためにやろうとしていることです.