我刚刚开始使用dask,可能需要一些帮助来完成一个看似简单的任务。我在hdf5文件中收集了256个3d(6000x264x264)uint32数组,我想对这些数组应用一些操作。它们总共约为400gb,但在磁盘上只有5gb的压缩空间。它们的块大小为(400、264、264)。基本上我现在只想在最后两个轴上求和,并为单独的文件创建一个额外的轴。我可以分别用numpy对每个文件进行求和,但我想试试dask。以下方法似乎很有效:
import dask.array as da
import h5py
daskArrays = []
for i in range(16**2):
data = h5py.File(f"/path/{i:04}.h5", 'r')['key']
daskArray = da.from_array(data, chunks=(400, 264, 264))
daskArrays.append(daskArray)
stackedDaskArrays = da.stack(daskArrays, axis=0)
summed = da.sum(stackedDaskArrays, axis=(-1,-2))
print(summed.shape)
``` `print` 返回一个形状(256,6000),这确实是我想要的。
但是,当我跑的时候 `summed.compute()` ,jupyter实验室笔记本在填满我的32gb内存后崩溃了。 `summed` 应该只有12MB,所以有些东西不是我想要的。我尝试过一些不同的块大小,但是我对块以及它们与压缩的关系有点困惑。
我错过了什么?压缩破坏了我的计划吗?
暂无答案!
目前还没有任何答案,快来回答吧!