在Python中用CPU和GPU计算FFT和IFFT的最佳方法?

2024-03-28 10:07:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在python中使用两个函数fft和ifft来生成dtype complex128的2dnumpy矩阵。在

不过,我在网上查过可能的解决方案:

  1. Numba显然不支持任何fft。除了南巴库达

  2. pyfft在visualstudio中不可下载,在ifft上只有fft。请参阅此处的示例https://pypi.org/project/pyfft/0.3.3/#cuda

  3. 相似的雷克纳.fft没有IFFT

(基本上来自这篇文章Improving FFT performance in Python

  1. 从pyfftwhttps://pypi.org/project/pyFFTW/的引入来看,它并没有比numpy提供任何优势。

  2. 与numpy相比,scipy比numpy快5%-10%,而且更好。

  3. 似乎有提到过nufft,请参见https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/,但它同样没有在visualstudio中下载。

  4. 另一个选择留给了pycuda,然而,它似乎复杂得多(甚至与pyfft相比,我现在没有时间找出基本的另一种语言。)

但是请注意,由于scipy的fft和ifft似乎没有实现并行计算,它比matlab的fft和ifft慢得多,大约是matlab的2到2.5倍。在

所以剩下的唯一选择似乎是编写fft并使用numba将其转换为paralla c代码: (算法)2D Fourier Transformation in C 和 (振幅)amplitude of numpy's fft results is to be multiplied by sampling period?。 另外,请参见Matlab的公式:https://www.mathworks.com/help/matlab/ref/fft2.htmlhttps://www.mathworks.com/help/matlab/ref/ifft2.html。在

问题1:使用cpu或gpu来计算fft和ifft(2D和3D)的最佳方法是什么?像pyfft的计划(gpu),或者paralla cpu计算?在

问题2:你能提供一些论文或算法的链接吗,或者是否有易于使用的现有软件包(对于visualstudio)?像伪代码:https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#Pseudocode


Tags: inhttpsorgfftnumpyprojectpypiscipy