代码之家  ›  专栏  ›  技术社区  ›  djhoese Sanzhar Dan

在多个DASK阵列上迭代和计算

  •  2
  • djhoese Sanzhar Dan  · 技术社区  · 6 年前

    我有多个dask数组,希望使用 imageio 一次一帧,但我认为这个问题足够普遍,解决方案可以帮助其他人。我想知道是否有一种方法可以按顺序计算数组,在计算一个数组并将其写入磁盘时,在剩余的工作线程上开始计算下一个数组。如果可能的话,如果调度器/图可以在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)
    

    看起来这很可能被使用Distributed Scheduler的用户破解,但是如果可能的话,我想使用线程调度器。我也不确定在我的真实世界中,考虑到内存使用情况,或者一次可能要写完整的帧而不是块,这是否是超级有用的。我也毫不怀疑这可以在一个自定义数组类对象中处理 da.store ……有些如何。

    1 回复  |  直到 6 年前
        1
  •  0
  •   MRocklin    6 年前

    如果您能够编写一个函数来获取数组的一个片段,然后适当地编写它,那么您可能能够使用如下函数 da.map_blocks .

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

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