如何对大量数据使用numpy

时间:2019-06-17 19:44:32

标签: python-3.x numpy bigdata numpy-ndarray fftw

我有很多数据点(至少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。我不需要返回太小的值,因为它们与我的应用程序无关。

您知道我如何加快算法的速度吗?

2 个答案:

答案 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])