Pythonってさあ……

ライブラリ充実してますね、今更に今更ですが。
以前、このブログでFFTW3ライブラリのラッパーを紹介しましたが、信じられないほどに読みにくいコードだったかもしれませんが、実はPythonのモジュールの1つであるnumpyには、fftあるんですよね……

まあ、あるってことは知ってたんですが、僕が想定していたのは専用のライブラリモジュールで、numpyにあるのは知らなかったんですよ。

と言う訳で。
何だか順序的には逆になってしまった感がありますが、ここにnumpyでのfft()のメモを残しておくことにします。何を今更と思われるかもしれませんが、僕の特技『手のひら返し』の威力の前に、その文言はあまりに無力です。
片腹痛しです。
まあ、あなたは頭が痛くなってるかもしれませんが。
無理せず、ご自愛を。

#!/usr/bin/env python
#coding:utf-8

import numpy
import numpy.fft

t=numpy.arange(0.0,4.0,1.0/4.0)
sig=numpy.cos(2.0*numpy.pi*2.0*t)
print sig

freq=numpy.fft.fft(sig)
print abs(freq)

単純な構成にしました。本当は、

import numpy
from numpy import *
from numpy.fft import fft

とでもしたらいいんでしょうけど、初っ端からそれだとどれがどのモジュールなのか見分けがつきません。特に僕はプログラマで言ったら、そうですねぇ……まあ、ロリですから(ここでのロリは幼いを意味します)、そういう部分は出きるだけはっきりさせといた方がいいんです。

で、これの実行結果は、まああんまり大したことないんですけど、次のようになります。

[ 1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.]
[  0.   0.   0.   0.   0.   0.   0.   0.  16.   0.   0.   0.   0.   0.   0.   0.]

上が入力信号(sig)、下が周波数分布(freq)ですね。
このプログラムは、表示の際に絶対値に変換している(abs()だよ)んですが、それを外すと以下のような結果になります。

[ 1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.  1. -1.]
[  0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   16.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j   0.+0.j]

結論:

numpyは使う予定がなくても、入れておくべきモジュールだと思う。