Мне нужны две функции fft и ifft в python для двумерной матрицы с n-кодом из комплекса dtype128.
Но я проверил возможные решения онлайн:
Очевидно, что Numbaне поддерживает ни одного FFT.кроме numba.cuda
pyfft, не загружался в visual studio и имел только fft на ifft.см. примеры здесь https://pypi.org/project/pyfft/0.3.3/#cuda
similiar reikna.fft не имеет IFFT
(В основном из этого поста Улучшение производительности FFT в 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, по-видимому, не реализованы параллельные вычисления, он намного медленнее, чем fft и ifft в matlab, примерно в 2-2,5 раза.
Так что, кажется, единственная оставшаяся опция записываетfft и использовать numba для перевода его в код с параллами c: (алгоритм) 2D преобразование Фурье в C и (амплитуда) амплитуда результатов fft numpy умножается на период выборки? .Также см. Формулы Matlab: https://www.mathworks.com/help/matlab/ref/fft2.html и https://www.mathworks.com/help/matlab/ref/ifft2.html.
Вопрос 1. Какой наилучший способ использовать процессор или графический процессор для вычисления fft и ifft (в 2D и 3D)?Как план Пифта (GPU), или вычисление Paralla CPU?
Вопрос 2: Не могли бы вы предоставить некоторые ссылки на статьи или алгоритмы, или есть существующие пакеты, которые просты в использовании (для visual studio)?как псевдокод: https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#Pseudocode