Numpy: numpy.fft.fft์—์„œ ๋งค์šฐ ๊ธด ๋Ÿฐํƒ€์ž„ (Trac # 1266)

์— ๋งŒ๋“  2012๋…„ 10์›” 19์ผ  ยท  19์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

_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
00 - Bug numpy.fft

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ numpy 1.17์—์„œ ์ˆ˜์ •๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  19 ๋Œ“๊ธ€

_ @ 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 ๋‚˜๋Š” ์ •๋ณด์— ํ™•์‹คํžˆ ๊ฐ์‚ฌํ•˜๊ณ  ๊ทธ๊ฒƒ์€ ๋ถˆํ–‰ํ•˜์ง€๋งŒ ๋ผ์ด์„ผ์Šค์™€ ๊ด€๋ จํ•˜์—ฌ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ numpy 1.17์—์„œ ์ˆ˜์ •๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @mreineck , ๋‹ซ๊ธฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰