2013-08-30 26 views
4

我有一些代碼是沉重使用np.fft.rfftnp.fft.irfft,所以這是優化的瓶頸。我應該走什麼方向比np.fft更快

有沒有比這更快的速度,如果有的話,我最好的選擇是什麼。我想到的情況是:

  • Cython - 聽說這非常快;但它會幫助這裏嗎?
  • 挖掘成numpy - rfft調用_raw_fft它做了很多檢查,然後調用fftpack.cfftf。 Profiler告訴我只有80%的時間在fftpack.cfftf,剝離了我需要的唯一一點可以節省一點時間的包裝。
  • 在某處找到更快的DFT算法?
  • 購買更多的計算機

所以,真正的問題歸結爲:

  1. 沒有人用用Cython經驗,知道這將是值得嘗試在這裏 - 或者可以在不使任何numpy的速度。
  2. 那裏有更快的軟件包嗎?可能有多快?
+0

我在另一個問題中找到了部分答案並放在下面 - 但如果人們認爲這個問題應該被關閉/刪除,我不會被冒犯。 (我離開它,因爲有人提出了這個問題,我會留給其他人來決定這是一個有幫助的問題) – Corone

+0

鑑於重複,我明天會刪除這個問題,如果沒有人說任何有趣的事情等等。 – Corone

+1

做你實際上需要計算所有頻率的響應?如果您只是在尋找一些選擇頻率,您可以通過編寫自定義FFT甚至創建一個數字濾波器來以所需頻率進行共振來顯着提高速度。 – DrRobotNinja

回答

5

我發現這個問題/答案這實際上回答的這一部分:

https://stackoverflow.com/a/8481916/1900520

表明,在SciPy的另一FFT實現,是一個相當快一點,但也有是一個名爲FFTW的軟件包,它的運行速度仍然更快(高達約3倍看這些基準)。

因此,這只是讓Cython會讓這個問題變得更快的問題。

+1

[我的FFTW包裝](https://github.com/hgomersall/pyFFTW)是基於Cython的:) –