我需要在python中使用两个函数fft和ifft来生成dtype complex128的2dnumpy矩阵。在
不过,我在网上查过可能的解决方案:
Numba显然不支持任何fft。除了南巴库达
pyfft在visualstudio中不可下载,在ifft上只有fft。请参阅此处的示例https://pypi.org/project/pyfft/0.3.3/#cuda
相似的雷克纳.fft没有IFFT
(基本上来自这篇文章Improving FFT performance in Python)
从pyfftwhttps://pypi.org/project/pyFFTW/的引入来看,它并没有比numpy提供任何优势。
与numpy相比,scipy比numpy快5%-10%,而且更好。
似乎有提到过nufft,请参见https://jakevdp.github.io/blog/2015/02/24/optimizing-python-with-numpy-and-numba/,但它同样没有在visualstudio中下载。
另一个选择留给了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.html和https://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
目前没有回答
相关问题 更多 >
编程相关推荐