我需要在python中将两个函数fft和ifft转换为dtype complex128的2d numpy矩阵。
Howevr,我在线检查了可能的解决方案:
Numba显然不支持任何fft。除了numba.cuda
pyfft,无法在Visual Studio中下载,并且只有ifft上的fft。在此处查看示例https://pypi.org/project/pyfft/0.3.3/#cuda
类似reikna.fft没有IFFT
(基本上来自此帖子Improving FFT performance in Python)
从pyfftw https://pypi.org/project/pyFFTW/的引入开始,与numpy相比并没有任何优势。
与numpy相比,scipy快了5%-10%左右,而且更好。
似乎提到了nufft,请参见https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/,但同样没有在Visual Studio中下载。
另一个选项留给了pycuda,但看起来似乎很复杂(即使与pyfft相比,我现在也没有时间基本上弄清另一种语言。)
但是请注意,由于scipy的fft和ifft似乎无法实现并行计算,因此它比matlab的fft和ifft慢了大约2到2.5倍。
因此,剩下的唯一选择似乎是写fft并使用numba将其转换为并行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.html和https://www.mathworks.com/help/matlab/ref/ifft2.html。
问题1:利用cpu或gpu计算fft和ifft(在2D和3D中)的最佳方法是什么?像pyfft的Plan(gpu)还是paralla cpu计算一样?
问题2:您能否提供一些论文或算法的链接,或者是否存在易于使用的现有软件包(适用于Visual Studio)?像伪代码:https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#Pseudocode