scipy.fftpack.rfft
函數返回DFT作爲浮點數的矢量,在實數和複數部分之間交替。這意味着一起乘以DFT(卷積),我將不得不做複雜的乘法「手動」,這似乎很棘手。這一定是人們經常做的事情 - 我認爲/希望有一個簡單的技巧來有效地做到這一點,我沒有發現?我應該如何將scipy.fftpack輸出向量放在一起?
基本上我想要使這兩種方法給出了相同的答案來解決這個代碼:
import numpy as np
import scipy.fftpack as sfft
X = np.random.normal(size = 2000)
Y = np.random.normal(size = 2000)
NZ = np.fft.irfft(np.fft.rfft(Y) * np.fft.rfft(X))
SZ = sfft.irfft(sfft.rfft(Y) * sfft.rfft(X)) # This multiplication is wrong
NZ
array([-43.23961083, 53.62608086, 17.92013729, ..., -16.57605207,
8.19605764, 5.23929023])
SZ
array([-19.90115323, 16.98680347, -8.16608202, ..., -47.01643274,
-3.50572376, 58.1961597 ])
注:我知道fftpack包含一個convolve
函數,但我只需要轉換一半的變換 - 我的過濾器可以提前一次,然後一遍又一遍地使用。
謝謝 - 從來沒有新的,我可以輕鬆地切換到複雜!那麼當然我必須重新回到'np.float64'和'hstack'的第一個和最後一個部分,然後再傳遞迴'irfft'。相當惱人的是,吃了很多scipy的速度增益!可能不是巧合... – Corone