_2009-10-19์ trac ์ฌ์ฉ์ koehler์ ์๋ณธ ํฐ์ผ http://projects.scipy.org/numpy/ticket/1266 , unknown์ ํ ๋น ๋จ ._
numpy.fft.fft์ ๋ฌธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋์ ์์ต๋๋ค.
"์ด๋ 2์ ๋์น์ ๋ํด ๊ฐ์ฅ ํจ์จ์ ์
๋๋ค. ์ด๊ฒ์ ๋ํ fft์ ๋ค๋ฅธ ํฌ๊ธฐ์ ๋ํ ์์
๋ฉ๋ชจ๋ฆฌ ์บ์๋ฅผ ์ ์ฅํ๋ฏ๋ก ๋๋ฌด ๋ง์ ๋ค๋ฅธ n์ผ๋ก ์ด๊ฒ์ ๋๋ฌด ๋ง์ด ํธ์ถํ๋ฉด ์ด๋ก ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค." , ์ ๋ fft ๋ฐํ์์์์ด ์ด์ํ ์ ์๋ณด๊ณ ํ๋ ๊ฒ์ด ์ค์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐฐ์ด ๊ธธ์ด์ ๋ฐ๋ผ fft ๋ฐํ์์ ๋งค์ฐ ๋ค์ํฉ๋๋ค.
[ipython shell, from numpy import *]
In [1]: %time fft.fft(zeros(119516))
CPU times: user 22.83 s, sys: 0.39 s, total: 23.23 s
Wall time: 23.53 s
In [3]: %time fft.fft(zeros(119517))
CPU times: user 36.33 s, sys: 0.08 s, total: 36.40 s
Wall time: 36.51 s
In [5]: %time fft.fft(zeros(119518))
CPU times: user 4.88 s, sys: 0.08 s, total: 4.96 s
Wall time: 5.02 s
In [7]: %time fft.fft(zeros(119519))
CPU times: user 0.45 s, sys: 0.00 s, total: 0.45 s
Wall time: 0.45 s
In [9]: %time fft.fft(zeros(119515))
CPU times: user 0.07 s, sys: 0.00 s, total: 0.08 s
Wall time: 0.08 s
In [11]: %time fft.fft(zeros(119514))
CPU times: user 15.84 s, sys: 0.06 s, total: 15.90 s
Wall time: 15.95 s
In [13]: %time fft.fft(zeros(119513))
CPU times: user 272.75 s, sys: 1.03 s, total: 273.78 s
Wall time: 275.63 s
_ @ endolith์ด (๊ฐ) 2009-11-20_์ ์์ฑํ์ต๋๋ค.
๊ด๋ จ : # 1177 http://projects.scipy.org/scipy/ticket/949
_ @ rgommers ๋ ์ด 2011-03-01_์ ์์ฑํ์ต๋๋ค.
_ @ rgommers ๋ ์ด 2011-03-01_์ ์์ฑํ์ต๋๋ค.
David C.๋ ํ์ํ ๊ฒฝ์ฐ Bluestein ๋ณํ์ ๊ตฌํํ์ต๋๋ค. https://github.com/cournape/numpy/tree/bluestein
๊ณง Numpy ํธ๋ ํฌ์ ์ฐฉ๋ฅ ํ ๊ฒ์ ๋๋ค.
2011-03-25์ @mwiebe๊ฐ ๋ง์ผ์คํค์ Unscheduled
๋ก ๋ณ๊ฒฝ ํ์ต๋๋ค.
์ด ํ๋ณด์์๋ ์์ ์์์ ๋ํ ํจ๋ฉ์ด ์ ์๋ฉ๋๋ค.
https://github.com/scipy/scipy/pull/3144
๋ ๋์ ํจ๋ฉ ํฌ๊ธฐ๋ฅผ ์ป๋ ๊ธฐ๋ฅ์ ๊ฐ๋ ๊ฒ์ numpys fftpack์์ ์ ์ฉํ ์ ํธ๋ฆฌํฐ๊ฐ ๋ ์ ์์ต๋๋ค.
์, m = 2 ** nextpow2(2 * n - 1)
๋์ next_regular
ํจ์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋น ๋ฆ
๋๋ค.
๋ํ ์ ์ ๋ ์งง์ ๋ฐฐ์ด์์ statsmodels ์๊ธฐ ์๊ด ํจ์ ๋ฅผ ํตํด pymbar ์
np.fft.fftpack._fft_cache.clear()
๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ด ์ํํ๊ฒ ์ฆ๊ฐํ์ง ์๋๋กํฉ๋๋ค. ์ด๊ฒ์ ์ด์์ ์ธ ํด๊ฒฐ์ฑ ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. "memsafe = True"์ ๊ฐ์ kwarg ๋ฐ / ๋๋ ์ ์ญ ๋ณ์๋ฅผ ๋ช ์ ์ ์ผ๋ก ์ฐธ์กฐํ์ง ์๊ณ ์๋์ผ๋ก ์บ์๋ฅผ ์ง์ฐ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@juliantaylor Padding์ ์ผ๋ฐ FFT์ ์ ์ฉ ํ ์ ์์ต๋๋ค.
@rgommers Bluestein ์๊ณ ๋ฆฌ์ฆ์ https://github.com/scipy/scipy/issues/4288 ์์์ฒ๋ผ ํ๋ผ์ ํฌ๊ธฐ์ ๋ํ FFT ์๋๋ฅผ ๋์ด์ง๋ง ๋ณต์กํ ์ฒํ์ ์ฌ์ ๊ณ์ฐ์ด ํ์ํ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ์ ์งน์งน ๊ฑฐ๋ฆฌ๊ณ ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ ์ฒญํฌ์ ์ฌ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ด numpy์ ์ข์์ง ํ์คํ์ง ์๊ณ ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด scipy.fftpack.czt๋ฅผ ์ฐ๊ธฐ ํ ์ ์์ต๋๊น?
์ด์จ๋ ๋๋ ์ด๊ฒ์ด https://github.com/numpy/numpy/issues/1177 ์ ๋ณต์ ๋ณธ์ผ๋ก ๋ซํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๊น? Rader์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ ๊ฒ์ด Bluestein์ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋ซ์ง ์์ผ๋ฉด?
@smcantab ์ ๋ฌธ์ ๊ฐ ๋ค๋ฅธ๊ฐ์?
@endolith ์ด๊ฒ์ ์ค๋ ์ ์ด์์ต๋๋ค :) ๊ทธ๋ฌ๋ ์, ์ด์ ๋ค์ ๋ณด์์ผ๋ฏ๋ก ๋ค๋ฅธ ๋ฌธ์ ๋ก ๋ณด์ ๋๋ค. ๋ด๊ฐ๋ณด๊ณ ํ ๋ฌธ์ ๋ ์ฌ์ ํ ๊ด๋ จ์ด์์ ์ ์์ผ๋ฉฐ ์๋ํ๋ ค๋ฉด pymbar์์ ์ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ตฌํํด์ผํ์ต๋๋ค.
์ฐธ๊ณ ๋ก, ์ค๋์ค ์ปจํผ๋ฐ์ค์์์ด ์๋ฅผ ๋ณด์ฌ์ค ๋๊ตฐ๊ฐ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ์ฌํํ๊ธฐ ์ฝ๊ณ ๊ทน๋จ์ ์ ๋๋ค.
%time np.fft.fft( np.random.randn(100000) )
Wall time: 16 ms
Out[16]:
array([ 196.58599022 +0.j , -88.38483360 +89.2507627j ,
-166.72250316+339.27161306j, ..., 12.22959535 -64.01621313j,
-166.72250316-339.27161306j, -88.38483360 -89.2507627j ])
%time np.fft.fft( np.random.randn(100003) )
Wall time: 1min 42s
Out[17]:
array([ 13.36160617 +0.j , -314.86472577-340.44686425j,
-258.36716707-170.43805382j, ..., -21.18014704+441.3618185j ,
-258.36716707+170.43805382j, -314.86472577+340.44686425j])
๊ธธ์ด 1e6์ fft : 16 MILLIseconds
fft ๊ธธ์ด 1e6 + 3 : 1 ๋ถ 42 ์ด
๋ฒ๊ทธ๊ฐ ์๋ ๊ธฐ๋ฅ. FFTPACK์ ํฌ๊ธฐ๊ฐ ์ซ์ 2, 3, 4, 5์ ๊ณฑ์ผ๋ก ๊ณ ๋ ค ๋ ๋ "๋น ๋ฆ"์ผ๋ฟ์ ๋๋ค. ํฐ ํ๋ผ์ ํฌ๊ธฐ์ ๋ํด ๋ ๋น ๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ค๋ ์ค๋ ์๋ง์ด ์์์ง๋ง ์์ง ๊ตฌํ๋์ง ์์์ต๋๋ค. 100003์ ์์์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ "๊ธฐ๋ฅ"์ด๋ผ๊ณ ๋ถ๋ฅด์ง ์์ ๊ฒ์ด์ง๋ง ๊ทธ๊ฒ์ ์ ์์ด๋ฉฐ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. :)
https://github.com/scipy/scipy/issues/4288 ์๋ Bluestein์ ์๊ณ ๋ฆฌ์ฆ์ด ์์ง๋ง ๋ณต์กํ ์ฒํ์ ์ฌ์ ๊ณ์ฐ์ด ํ์ํ๋ฏ๋ก ์ด๋ค ์์ ํฌ๊ธฐ์์ ๊ฐ์น๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ์ํํด์ผํฉ๋๋ค.
ํฅ๋ฏธ ๋กญ๊ตฐ. ๋ด๊ฐ ์๋ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ Julia์ Matlab์ ๊ธฐ๋ณธ fft ๊ตฌํ์๋ ์ด๋ฌํ ๋์์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๋์์ ํผํ๊ธฐ ์ํด Julia ๊ตฌํ์ด ๋ฌด์์ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
Julia์ Matlab์ FFTW๋ฅผ ํธ์ถํ๋๋ฐ ๋ผ์ด์ผ์ค ๋๋ฌธ์ ํ ์ ์์ต๋๋ค.
FFTW์ ๋ํ Python ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค. pyFFTW๋ ๋ค์ ์ต์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. FFT ์๋๊ฐ ๋ฌธ์ ๋ผ๋ฉด ์๋ง๋ ๊ทธ ๋ฐฉ๋ฒ ์ผ ๊ฒ์ ๋๋ค. FFTPACK์ ๊ทธ ๋น์์๋ ์ข์ ๊ตฌํ ์ด์์ง๋ง ์ฝ๋์ ํ๋์จ์ด๋ ๊ณ์ ๋ฐ์ ํ์ต๋๋ค.
@charris ๋๋ ์ ๋ณด์ ํ์คํ ๊ฐ์ฌํ๊ณ ๊ทธ๊ฒ์ ๋ถํํ์ง๋ง ๋ผ์ด์ผ์ค์ ๊ด๋ จํ์ฌ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@standarddeviant FFTW๋ฅผ ์ฌ์ฉํ๋๋ก numpy / scipy ์์ pyfftw๋ฅผ ์์ญ์ด ํจ์น ํ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ numpy 1.17์์ ์์ ๋์ด์ผํฉ๋๋ค.
๊ฐ์ฌํฉ๋๋ค @mreineck , ๋ซ๊ธฐ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ numpy 1.17์์ ์์ ๋์ด์ผํฉ๋๋ค.