迭代和计算多个 dask 数组
Iterate and compute over multiple dask arrays
我有多个 dask 数组,想使用 imageio
一次一帧将它们保存为 GIF 或某些电影格式,但我认为这个问题很普遍,解决方案可以帮助其他人.我想知道是否有一种方法可以按顺序计算数组,并在计算一个数组并将其写入磁盘时,开始计算剩余工作人员的下一个数组。如果可能的话,如果 scheduler/graph 可以在 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
...某种方式在自定义的类数组对象中处理。
如果您能够编写一个函数来接收数组的一部分,然后适当地编写它,您也许可以使用像 da.map_blocks
这样的函数。
如果您尝试写入一个难以保证随机访问的文件,这将变得更加复杂。
也许您可以使用 map_blocks
将每个切片保存为单个图像,然后使用一些 post 处理工具将这些图像拼接在一起。
我有多个 dask 数组,想使用 imageio
一次一帧将它们保存为 GIF 或某些电影格式,但我认为这个问题很普遍,解决方案可以帮助其他人.我想知道是否有一种方法可以按顺序计算数组,并在计算一个数组并将其写入磁盘时,开始计算剩余工作人员的下一个数组。如果可能的话,如果 scheduler/graph 可以在 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
...某种方式在自定义的类数组对象中处理。
如果您能够编写一个函数来接收数组的一部分,然后适当地编写它,您也许可以使用像 da.map_blocks
这样的函数。
如果您尝试写入一个难以保证随机访问的文件,这将变得更加复杂。
也许您可以使用 map_blocks
将每个切片保存为单个图像,然后使用一些 post 处理工具将这些图像拼接在一起。