如何使用 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])
我有一组非常大的数据点(至少 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])