map_blocks
сначала может быть немного сложнее. Проблема здесь в том, что func
возвращает массив формы ()
, а в map_blocks
вы указываете выходные куски (1,1)
.
Если я вас правильно понимаю, вы хотите заменить каждый кусок x
его медианой (это будут новые фрагменты размером (1,1)
). Для этого вам нужно вывести массив с этой формой. Смотрите следующий код:
import dask
import dask.array as da
from numpy import median,array
def func(a):
m = median(a)
print(m)
return array(m)[None,None] # add dummy dimensions
# x = da.random.random((10000, 10000), chunks=(5000, 5000))
x = da.random.random((100, 100), chunks=(50, 50)) # try things out on small array
x.map_blocks(func,chunks=(1,1)).compute()
Индексирование массива с помощью None
добавляет к нему фиктивное измерение. Следовательно, array(m)[None,None]
будет иметь желаемую форму (1,1)
.
Кроме того, для игры с этими вещами, пока они не сработают, имеет смысл работать с небольшими данными, которые я добавил в приведенном выше примере.