を使用して 1.25 GB のデータセットを Python にインポートしようとしていますdask.array
ファイルは 1312*2500*196uint16
の配列です。float32
後で処理するために、これを配列に変換する必要があります。
この Dask 配列を でつなぎ合わせることができましたがuint16
、 に変換しようとするとfloat32
、メモリ エラーが発生します。
チャンクサイズに何をしても問題ありません。常にメモリエラーが発生します。
配列を 100 行で連結して配列を作成します (2500 次元を 100 行の小さな断片に分割します。これは、ファイルを読み取ってから配列を作成するために使用する必要がある画像ファイルをdask
ネイティブに読み取ることができないためです。以下では、 「できるだけ短い」コード スニペットを提供します。.RAW
numpy.memmap()
私は2つの方法を試しました:
1)完全なuint16
配列を作成してから、次のように変換してみてくださいfloat32
:
(注:memmap
は 1312x100x196 の配列で、行の範囲は 0 から 24 です)
for i in range(lines):
NewArray = da.concatenate([OldArray,Memmap],axis=0)
OldArray = NewArray
return NewArray
そして、私は使用します
Float32Array = FinalArray.map_blocks(lambda FinalArray: FinalArray * 1.,dtype=np.float32)
方法 2:
for i in range(lines):
NewArray = da.concatenate([OldArray,np.float32(Memmap)],axis=0)
OldArray = NewArray
return NewArray
どちらの方法でもメモリ エラーが発生します。
これには何か理由がありますか?
dask
配列は最大 100 GB のデータセット計算を実行できると読みました。
すべてのチャンク サイズを試しました (10x10x10 から 1 行まで)