scipy の fft 関数 ( http://www.astro.rug.nl/efidad/scipy.fftpack.basic.htmlを参照)でこれを行う関数はないようです。
Python 用の固定小数点 FFT ライブラリを見つけることができない限り、ネイティブのハードウェア浮動小数点形式が 128 ビットであるため、必要な関数が存在する可能性はほとんどありません。rfft メソッドを使用して、FFT の実数値コンポーネント (位相なし) のみを取得できるように見えます。これにより、RAM の半分を節約できます。
インタラクティブなpythonで次を実行しました:
>>> from numpy import *
>>> v = array(10000*random.random([512,512,512]),dtype=int16)
>>> shape(v)
(512, 512, 512)
>>> type(v[0,0,0])
<type 'numpy.int16'>
この時点で、python の RSS (Resident Set Size) は 265MB でした。
f = fft.fft(v)
そしてこの時点でpython 2.3GBのRSS。
>>> type(f)
<type 'numpy.ndarray'>
>>> type(f[0,0,0])
<type 'numpy.complex128'>
>>> v = []
この時点で、RSS は 2.0GB まで減少します。
「fft.rfft(v)」を使用して実数値のみを計算すると、1.3GB RSS になります。(予想通り、ほぼ半分)
やっている:
>>> f = complex64(fft.fft(v))
最初にcomplex128バージョン(2.3GB)を計算し、それをcomplex64バージョン(1.3GB)にコピーするため、両方の世界で最悪です。これは、マシンのピークRSSが3.6GBであり、その後1.3GBに落ち着いたことを意味しますまた。
4GB の RAM があれば、これで問題なく動作すると思います (私の場合と同様)。問題は何ですか?