我有很多数据点(至少100万个)。我正在使用pyFFTW进行FFT。为了获取x轴值,我正在使用
x = np.linespace(0.0, 1.0 / (2.0 * T), len(fft_data))
我需要将所有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。我不需要返回太小的值,因为它们与我的应用程序无关。
您知道我如何加快算法的速度吗?
答案 0 :(得分:2)
IIUC,只是
y = 2.0 / N * np.abs(fft_data)
和hstack
np.hstack([x.reshape(-1,1),
y.reshape(-1,1)])
答案 1 :(得分:1)
向量化!
result = np.array([x, np.abs(fft_data) * 2.0/N])