更快地进行小波变换/更快地追加数据

时间:2015-08-17 03:02:47

标签: python numpy scipy pywt

我正在进行数据的一维小波变换。我怎样才能让它更快? 我有140万个样本和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 个答案:

答案 0 :(得分:4)

这是一个常见的错误。您不希望一次向一个数组追加一行,因为每次迭代都需要复制整个数组。复杂性: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