我正在尝试使用将 1.25 GB 数据集导入 pythondask.array
该文件是一个 1312*2500*196 的数组uint16
。我需要将其转换为float32
数组以供以后处理。
我已经设法将这个 Dask 数组拼接在一起uint16
,但是当我尝试转换为时float32
出现内存错误。
不管我对块大小做什么,我都会遇到内存错误。
我通过以 100 行连接数组来创建数组(将 2500 维分解为 100 行的小片段,因为dask
无法原生读取.RAW
图像文件,我必须使用它numpy.memmap()
来读取文件然后创建数组。下面我将提供“尽可能短”的代码片段:
我尝试了两种方法:
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 到单行)