考虑一个大到适合内存的二维数组X
——在我的例子中,它以 Zarr 格式存储,但这并不重要。我想在数组上逐块映射一个函数并保存结果,而无需将整个数组加载到内存中。例如,
import dask.array as da
import numpy as np
X = da.arange(10000000,
dtype=np.int32).reshape((10,1000000)).rechunk((10,1000))
def toy_function(chunk):
return np.mean(chunk,axis=0)
lazy_result = X.map_blocks(toy_function)
lazy_result.to_zarr("some_path")
有没有办法限制一次评估的块数?在我的用例中,lazy_result[:,:1000].compute()
适合内存,但lazy_result.compute()
对于内存来说太大了。当我尝试写入 Zarr 时,内存使用量会增加,直到它达到最大值并被杀死。我可以这样做而不必导致一些不方便的事情,比如for i in range(1000): lazy_result[:,(i*1000):((i+1)*1000)].to_zarr('some_path'+str(i))