ここでは、PythonにおけるSciPyを用いたデータ操作方法について解説しています。
SciPyとは
SciPyとはNumPyの拡張機能を基に構築されている科学計算を行うためのライブラリです。
特徴としては信号処理、遺伝的アルゴリズム、フーリエ変換等の工学系の科学計算が容易にできる点です。
SciPyのインストール
SciPyを使用する前には、NumPyも入れておく必要があります。NumPyを基にSciPyが構築されているためです。また、SciPyはmatplotlibと一緒に使用される場合があるのでこちらも入れておきましょう。
$ pip install numpy
NumPyのインストールです。
$ pip install matplotlib
matplotlibのインストールです。
$ pip install scipy
SciPyのインストールです。
SciPyを用いた使用例
from scipy import signal
import numpy as np
import matplotlib.pyplot as plt
#1---パルスの生成
sig = np.repeat([0., 1., 0.], 100)
win = signal.windows.hann(100)
#2---2つのN次元配列を畳み込み
filtered = signal.convolve(sig, win, mode='same') / sum(win)
#3---グラフ化
fig, (ax_orig,ax_win,ax_filt) = plt.subplots(3, 1, sharex=True)
ax_orig.plot(sig)
ax_orig.set_title('pulse')
ax_orig.margins(0, 0.1)
ax_win.plot(win)
ax_win.set_title('pulse2')
ax_win.margins(0, 0.1)
ax_filt.plot(filtered)
ax_filt.set_title('Filtered signal')
ax_filt.margins(0, 0.1)
fig.tight_layout()
fig.savefig("plot.png")
上記がプログラムになります。このプログラムはSciPyサイトの「scipy.signal.convolve」のサンプルコードになります。
それでは解説していきます。
#1---パルスの生成
sig = np.repeat([0., 1., 0.], 100)
win = signal.windows.hann(100)
1の部分ではパルスを生成しています。最初に0、1を100回繰り返したものを生成しています。
次にハン窓を生成しています。詳しい解説はこちらを参照下さい。
#2---2つのN次元配列を畳み込み
filtered = signal.convolve(sig, win, mode='same') / sum(win)
2の部分では2つのN次元配列を畳み込みしています。「scipy.signal.convolve(in1, in2, mode=’full’, method=’auto’)」引数はそれぞれ、in1が最初の入力。in2が2番目の入力。 in1と同じ次元数である必要があります。modeが出力のサイズを示す文字列になります。
詳しい解説は公式サイトを覗いて下さい。
#3---グラフ化
fig, (ax_orig,ax_win,ax_filt) = plt.subplots(3, 1, sharex=True)
3の部分ではmatplotlibでグラフ化しています。
グラフ化しているものは元のパルス、インパルス応答フィルタ、フィルタリング信号になります。
fig.savefig("plot.png")
最後に画像として保存しています。
結果

フィルタされた信号が出力されていることが確認できました。
SciPyには様々なライブラリがあり、簡単に計算を行うことができるので便利です。
SciPyの便利なライブラリ
項目 | 内容 |
constants | 物理定数と変換係数 |
cluster | 階層的クラスタリング、ベクトル量子化、K平均 |
fftpack | 離散フーリエ変換アルゴリズム |
integrate | 数値積分ルーチン |
interpolate | 補間ツール |
io | データ入出力 |
linalg | 線形代数ルーチン |
misc | その他(例:画像操作) |
ndimage | 多次元画像処理のためのさまざまな機能 |
optimize | 線形計画法を含む最適化アルゴリズム |
signal | 信号処理ツール |
sparse | スパース行列と関連アルゴリズム |
spatial | KD木、最近傍、距離関数 |
special | 特別な機能 |
stats | 統計関数 |
様々な便利なライブラリがあることが分かります。
その他、SciPyを用いた使用例
項目 | 内容 |
Under construction . . . | Under construction . . . |