我有一个问题,当索引到由3D tiffs文件夹构建的dask数组时,如何减少文件io的dask.delayed
几乎完全as described in the docs,并且类似于dask-image
:我的4D(tzyx)dask.array<stack, shape=(600, 65, 512, 512), dtype=uint16, chunksize=(1, 65, 512, 512), chunktype=numpy.ndarray>
由一堆dask.delayed(skimage.io.imread)
调用构成,这些调用读取3D tiff堆栈。
借助机会缓存,我可以在3D视图上最小化io事件(即多次调用stack[0].compute()
只会读取tiff文件一次),但是如果我顺序地索引到该堆栈中如在更改z位置时所做的操作(例如stack[0,1].compute()
... stack[0,2].compute()
...)在不同的平面上,则z堆栈的每个“平面”都会产生新的读取。我想知道最好的解决方案是否是制作一个不同的dask.delayed
图像读取器函数,该函数具有自己的简单缓存机制来重新传送最近读取的文件(例如,使用cachey.memoize
) ,或者我是否通常可以更好地使用dask.array API来避免多次读取。
(为此,我的应用程序正在使用napari图像查看器工作)。
感谢任何建议!
答案 0 :(得分:0)
我怀疑这是Dask的优化策略遇到的问题。我建议您在每种情况下都尝试.compute(optimize_graph=False)
,看看是否有帮助。