Wiem, że ogólnie rzecz biorąc, FFT and multiplication
jest zwykle szybszy niż operacja bezpośrednia convolve
, gdy macierz jest stosunkowo duża. Jednak zawieram bardzo długi sygnał (powiedzmy 10 milionów punktów) z bardzo krótką odpowiedzią (powiedzmy 1 tysiąc punktów). W tym przypadku fftconvolve
nie wydaje się mieć większego sensu, ponieważ zmusza FFT drugiej macierzy do tego samego rozmiaru pierwszej macierzy. Czy w tym przypadku jest to szybsze po prostu wykonać bezpośrednie convolve?Python SciPy convolve vs fftconvolve
Odpowiedz
FFT szybkie splotowanie za pomocą algorytmów dodawania zakładek lub nakładania można wykonać w ograniczonej pamięci za pomocą FFT, która jest tylko małą wielokrotnością (np. 2X) większą niż odpowiedź impulsowa. Przerywa długi FFT w odpowiednio zachodzące na siebie krótsze, ale wyściełane FFT.
Nawet przy obciążeniu stropów, O (NlogN) pobije M * N wydajności dla wystarczająco dużej N i M.
Spójrz na porównanie zrobiłem tutaj:
http://scipy-cookbook.readthedocs.io/items/ApplyFIRFilter.html
Twoja sprawa może znajdować się w pobliżu przejścia pomiędzy zwykłym splotem a użyciem splotu opartego na FFT, więc najlepszym wyjściem (zgodnie z sugestią @Dougala w komentarzu) jest samodzielne zrobienie tego.
(Zauważ, że nie pokrywają dodaj lub pokrywają zapisywanie w tym porównaniu.)
link wydaje się nie wskazywać, co masz na myśli (mimo że I tak go znaleźć na stronie) – luca
@luca Dzięki. Ta strona była oryginalnie na starej wiki scipy, której już nie ma. Zaktualizowałem link. –
dziękuję za pomoc. Teraz zrobiłem sprawdzić się, zrobiłem splot z 2 tablic, wielkość 2^20 a 2^4, a jest to wynik:
numpy.convolve: 110 ms
scipy.signal.convolve: 1.0 s
scipy.signal.fftconvolve: 2.5 s
Więc mamy zwycięzcę, numpy convolve jest to znacznie szybciej niż inni. Wciąż nie wiem dlaczego.
Teraz wypróbowałem 2 dłuższe tablice o rozmiarze 2^22 i 2^10. Wynik:
numpy.convolve: 6.7 s
scipy.signal.convolve: 221 s
scipy.signal.fftconvolve: MemoryError
Różnica staje się większa.
- 1. Periodogram w Octave/Matlab vs scipy
- 2. SciPy SVD vs. Numpy SVD
- 3. python numpy/scipy curve fitting
- 4. scipy/Python zainstalować na Ubuntu
- 5. Python Scipy FFT wav files
- 6. Zrozumienie scipy deconvolve
- 7. Python scipy - określ niestandardową dystrybucję dyskretną
- 8. Python (NumPy, SciPy), znajdowanie pustej przestrzeni macierzy
- 9. Python/Scipy - implementacja sigma optimize.curve_fit do optimize.leastsq
- 10. Scipy i CX_freeze - Błąd importowania scipy: nie można importować scipy będąc w katalogu źródłowym scipy
- 11. Boo vs C# vs Python?
- 12. python 2.7 vs python 3.1
- 13. Scipy Derivative
- 14. Python: string.uppercase vs. string.ascii_uppercase
- 15. Python time.sleep() vs event.wait()
- 16. Python komentarze: # vs. strings
- 17. Python os.pipe vs multiprocessing.Pipe
- 18. Python: os.path.exists vs os.path.isdir
- 19. C++ vs precyzją Python
- 20. Python: 'import *' vs execfile
- 21. Python vs deskryptor nieruchomości
- 22. scipy, lognormal distribution - parametry
- 23. Scipy Sparse Matrix - Mnożenie wektorów gęstych - Blocks vs Large Matrix
- 24. Nie można zaktualizować Scipy
- 25. Uruchamianie Scipy na Heroku
- 26. SciPy zamiast GNU Octave
- 27. Python: obsługa dużego zbioru danych. Scipy czy Rpy? I jak?
- 28. Python - scipy: Moduł Oda: problem włączeniu opcji stopniową solver
- 29. Python/Numpy/Scipy - Konwertowanie ciągu znaków na funkcję matematyczną
- 30. python/Numpy/scipy: Rysowanie Poissona przypadkowe wartości z różnych lambda
Czy istnieje powód, dla którego nie można po prostu zmierzyć obu podejść, np. Za pomocą 'timeit'? – Dougal
Nie znałem tej funkcji. Spróbuję. Chciałbym jednak także poznać podstawową teorię. – LWZ