3

を使用して 1.25 GB のデータセットを Python にインポートしようとしていますdask.array

ファイルは 1312*2500*196uint16の配列です。float32後で処理するために、これを配列に変換する必要があります。

この Dask 配列を でつなぎ合わせることができましたがuint16、 に変換しようとするとfloat32メモリ エラーが発生します。

チャンクサイズに何をしても問題ありません。常にメモリエラーが発生します。

配列を 100 行で連結して配列を作成します (2500 次元を 100 行の小さな断片に分割します。これは、ファイルを読み取ってから配列を作成するために使用する必要がある画像ファイルをdaskネイティブに読み取ることができないためです。以下では、 「できるだけ短い」コード スニペットを提供します。.RAWnumpy.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 行まで)

4

1 に答える 1