Scipy quadrati c 1D Интерполяция большого списка одномерных последовательностей очень медленная - PullRequest
0 голосов
/ 17 апреля 2020

У меня большой список (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, но на данный момент он не поддерживает интерполяцию. Заранее спасибо!

...