Итерация и вычисление для нескольких массивов dask - PullRequest
0 голосов
/ 09 июня 2018

У меня есть несколько массивов dask, и я хотел бы сохранить их в GIF или какой-нибудь формат фильма, используя 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)

Это выглядиткак будто это возможно взломать пользователи с распределенным планировщиком, но я бы хотел использовать поточный планировщик, если это возможно.Я также не уверен, что это супер полезно в моем конкретном случае, учитывая использование памяти или необходимость писать целые кадры за раз вместо кусков.Я также не сомневаюсь, что это может быть обработано в пользовательском массивоподобном объекте с da.store ... кое-как.

1 Ответ

0 голосов
/ 12 июня 2018

Если вы можете написать функцию, которая берет фрагмент массива и затем записывает его соответствующим образом, вы можете использовать функцию, подобную da.map_blocks.

Это станет намного сложнее, если вы попытаетесь записать в один файл, в котором произвольный доступ труднее гарантировать.

Возможно, вы могли бы использовать map_blocks, чтобы сохранить каждый фрагмент какодно изображение, а затем используйте какой-нибудь инструмент постобработки, чтобы сшить эти изображения вместе.

...