Мне нужно покадрово чередовать два больших набора данных HDF5, представляющих видеокадры из двух каналов микроскопического измерения. Я подумал, что Dask подойдет для этой работы и последующих процессов.
Два массива имеют одинаковую форму и тип данных. Основываясь на этой ссылке, я могу сделать это с помощью NumPy для массивов меньше памяти: Переплетение двух массивов numpy.
import numpy as np
# a numpy example of channel 1 data
ch1 = np.arange(1,5)[:,np.newaxis,np.newaxis]*np.ones((4,3,2))
# channel 2 has the same shape and dtype
ch2 = np.arange(10,50,10)[:,np.newaxis,np.newaxis]*np.ones((4,3,2))
# the interleaving starts with assigning a new array with douled size of the first dimension
ch1_2 = np.empty((2*ch1.shape[0],*ch1.shape[1:]), dtype=ch1.dtype)
# two assignments takes care of the interleaving
ch1_2[0::2] = ch1
ch1_2[1::2] = ch2
К сожалению, это не относится к Dask.
import dask.array as da
da_ch1 = da.from_array(ch1)
da_ch2 = da.from_array(ch2)
da_ch1_2 = da.empty((2*da_ch1.shape[0],*da_ch1.shape[1:]), dtype=da_ch1.dtype)
da_ch1_2[0::2] = da_ch1
da_ch1_2[1::2] = da_ch2
Это завершается ошибкой: присвоение элемента с ‹классом 'slice'› не поддерживается.
Может ли кто-нибудь помочь мне с альтернативным подходом, совместимым с Dask? Любая помощь будет оценена по достоинству.