如何使用 numpy 处理大量数据

How to use numpy for large sets of data

我有一组非常大的数据点(至少 100 万)。我正在使用 pyFFTW 进行 FFT。为了获得 x 轴值,我正在使用 x = np.linespace(0.0, 1.0 / (2.0 * T), len(fft_data))

我需要 return 所有 FFT 值作为列表列表(例如:[[x1, y1], [x2, y2]])。

我正在使用此代码:

for i, item in enumerate(x):
    result.append([item, 2.0 / N * abs(fft_data[i])])

问题是我的 for 循环必须迭代 500 000 个元素而且它没有我想要的那么快。在我的电脑上大约需要 13 秒。有什么办法可以更快地做到这一点?我正在考虑使用 numpy,但我没有太多经验。

我能够使用的一项改进是检查 2.0 / N * abs(fft_data[i]) 是否低于 0.001。我不需要 return 太小的值,因为它们与我的应用程序无关。

你知道我怎样才能加快算法速度吗?

IIUC,只是

y = 2.0 / N * np.abs(fft_data)

hstack

np.hstack([x.reshape(-1,1),
           y.reshape(-1,1)])

矢量化!

result = np.array([x, np.abs(fft_data) * 2.0/N])