Ускоренное вейвлет-преобразование / добавление данных быстрее

Я беру 1-D вейвлет-преобразование данных. Как я могу сделать это быстрее? У меня 1,4 миллиона образцов и 32 функции.

def apply_wavelet_transform(data):
    ca,cd=pywt.dwt(data[0,:],'haar')
    for i in range(1,data.shape[0]):
        ca_i,__=pywt.dwt(data[i,:],'haar')
        ca=np.vstack((ca,ca_i))
    return ca

Учтите, что меня не беспокоит использование памяти, а также скорость выполнения.

1 ответ

Решение

Это распространенная ошибка. Вы не хотите добавлять строки в массив по одной за раз, потому что каждая итерация требует копирования всего массива. Сложность: O(N**2). Гораздо лучше сохранить промежуточные результаты в списке и сформировать массив в конце. Это лучше, потому что списки не требуют, чтобы их элементы были непрерывными в памяти, поэтому копирование не требуется.

def apply_wavelet_transform(data):
    results_list = []
    for row in data:
        ca, cd = pywt.dwt(row, 'haar')
        results_list.append(ca)
    result = np.array(results_list)
    return result
Другие вопросы по тегам