首页 > 解决方案 > 迭代和计算多个 dask 数组

问题描述

我有多个 dask 数组,并希望一次使用imageio一帧将它们保存为 GIF 或某种电影格式,但我认为这个问题足够通用,该解决方案可以帮助其他人。我想知道是否有一种方法可以按顺序计算数组,并且在计算一个数组并将其写入磁盘时,开始计算剩余工作人员的下一个。如果可能的话,如果调度程序/图形可以在 dask 数组之间共享任务(如果有的话),那就太好了。

在我看来,代码看起来像这样:

import dask.array as da
writer = Writer(...)
for dask_arr in da.compute([dask_arr1, dask_arr2, dask_arr3]):
    writer.write_frame(dask_arr)

看起来这可能是分布式调度程序的用户可以破解的,但如果可能的话,我想使用线程调度程序。我也不确定这在我的确切现实世界案例中是否超级有用,因为内存使用或可能不得不一次写入整个帧而不是块。我也不怀疑这可以在一个自定义的类似数组的对象中处理da.store......有些方式。

标签: pythondask

解决方案


如果您能够编写一个函数,该函数接受数组的一部分,然后适当地编写它,您也许可以使用类似da.map_blocks.

如果您尝试写入一个随机访问更难保证的文件,这将变得更加复杂。

也许您可以使用map_blocks将每个切片保存为单个图像,然后使用一些后处理工具将这些图像拼接在一起。


推荐阅读