У меня большой список (500 000+) одномерных последовательностей, и я хочу квадратично интерполировать каждую из них. Поскольку они не имеют одинаковый размер, я вынужден l oop над ними и применять scipy.interpolate.interp1D для каждой последовательности. Это очень медленно, и я ищу способ закрепить вещи.
На данный момент у меня есть следующая функция:
def interp_sequence (sequence, max_len):
'''Interpolate sequences in order to reduce their length to max_len
sequences (list of numpy arrays): The sequences to interpolate
maxlen (int): The maximum length of the sequence: All sequences will be interpolated to match this length
-------------------------------------------------------------------
returns (ndarray): The interpolated sequences
'''
interp_obs = np.zeros((len(obs_list), 5, 120))
# Looping is dirty... But the sequences have different lengths...
for idx, s in enumerate(sequences):
original_len = s.shape[1]
f = interp1d(np.arange(original_len), s, 'quadratic', axis = 1)
interp_seq = np.apply_along_axis(f, 0, np.linspace(0, original_len -1, num = max_len))
interp_obs[idx] = interp_seq
return interp_obs
Я также пробовал с пониманием списка, которое не улучшить производительность. Я хотел бы использовать numba-scipy, но на данный момент он не поддерживает интерполяцию. Заранее спасибо!