※このページではアフィリエイト広告を利用しています

【Python応用】Pythonと数値計算-SciPyを用いたデータ操作-

Python

Scipy(サイパイ)は、科学技術計算用のPythonライブラリであり、数学、科学、エンジニアリング分野で幅広い機能があります。

ここでは、PythonにおけるSciPyを用いたデータ操作方法について解説しています。

この記事の対象

  • SciPyについて知りたい方
  • SciPyの便利なモジュールについて知りたい方
  • SciPyの使用例を知りたい方
スポンサーリンク
スポンサーリンク

SciPyとは

SciPyとはNumPyの拡張機能を基に構築されている科学計算を行うためのライブラリです。

特徴としては信号処理、遺伝的アルゴリズム、フーリエ変換等の工学系の科学計算が容易にできる点です。

公式サイト

SciPyのインストール

SciPyを使用する前には、NumPyも入れておく必要があります。NumPyを基にSciPyが構築されているためです。また、SciPyはmatplotlibと一緒に使用される場合があるのでこちらも入れておきましょう。

$ pip install numpy

NumPyのインストールです。

$ pip install matplotlib

matplotlibのインストールです。

$ pip install scipy

SciPyのインストールです。

SciPyを用いた使用例

scipy.constants – 物理定数の利用

import scipy.constants as const

print(const.c)  # 光速
print(const.G)  # 重力定数
#299792458.0
#6.6743e-11

物理定数を利用する際に便利なモジュールです。

scipy.linalg – 線形代数の機能

import numpy as np
import scipy.linalg

A = np.array([[1, 2], [3, 4]])
B = scipy.linalg.inv(A)  # 逆行列の計算
print(A)
print(B)

「scipy.linalg」では、行列の操作や線形代数の演算が可能です。

[[1 2]
 [3 4]]
[[-2.   1. ]
 [ 1.5 -0.5]]

scipy.stats – 確率統計

import scipy.stats

data = [1, 2, 2, 3, 3, 3, 4, 4, 5]
mean = scipy.stats.gmean(data)
std = scipy.stats.gstd(data)
print(mean)
print(std)

「scipy.stats」は統計解析に関する演算が可能です。

2.7377287445670455
1.6252408862789067

scipy.integrate – 積分

import numpy as np
import scipy.integrate

def func(x):
    return x**2

result, error = scipy.integrate.quad(func, 0, 2)
print(result) 

「scipy.integrate」は数値積分を行う機能です。関数func(x)を区間[0, 2]で数値積分しています。quad()関数は積分の結果と誤差の推定値を返しています。resultには積分の結果が、errorには誤差が格納されています。

2.666666666666667

scipy.signal – 信号処理

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スパース行列と関連アルゴリズム
spatialKD木、最近傍、距離関数
special特別な機能
stats統計関数

様々な便利なライブラリがあることが分かります。Scipyは多くの機能を提供しており、科学技術計算のさまざまな側面で活用できます。ScipyはNumPyと組み合わせて使用することで、より高度な計算や分析を行うのに役立つおすすめのライブラリです。

タイトルとURLをコピーしました