工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python SciPy:ライブラリと関数の包括的チュートリアル

Python SciPy:ライブラリと関数の包括的チュートリアル

SciPyは、NumPyを拡張して数学、科学、工学、技術的問題を解決するツールを提供するオープンソースライブラリです。NumPyの上に構築され、データ操作と可視化のための幅広いハイレベルコマンドを提供します。

サブパッケージ

このチュートリアルの内容:

なぜSciPyを使うのか?

NumPy vs SciPy

NumPy

SciPy

インストールと環境セットアップ

pipまたはシステムパッケージマネージャでSciPyをインストール:

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

スクリプトでSciPyとNumPyをインポート:

from scipy import special
import numpy as np

scipy.ioでのファイルI/O

MATLAB .matファイルの保存と読み込みが簡単:

import numpy as np
from scipy import io as sio

array = np.ones((4, 4))
sio.savemat('example.mat', {'ar': array})
loaded = sio.loadmat('example.mat', struct_as_record=True)
print(loaded['ar'])

出力:

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

特殊関数 – scipy.special

よく使われる特殊関数の例:

線形代数 – scipy.linalg

行列式、逆行列、固有値、固有ベクトルを計算:

from scipy import linalg
import numpy as np

A = np.array([[4,5],[3,2]])
print(linalg.det(A))      # -7.0
print(linalg.inv(A))      # 逆行列
vals, vecs = linalg.eig(A)
print(vals)               # 固有値
print(vecs)               # 固有ベクトル

出力:

-7.0
array([[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]])
[ 9.+0.j -1.+0.j]
[[ 0.70710678 -0.5547002 ]
 [ 0.70710678  0.83205029]]

離散フーリエ変換 – scipy.fftpack

正弦波を変換しスペクトルを可視化:

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy import fftpack

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)

plt.plot(t, wave)
plt.xlabel('Time (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

最適化 – scipy.optimize

スカラ関数の最小値をBFGSとバスケットホッピングで探索:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('BFGS結果:', min_bfgs)

min_basin = optimize.basinhopping(func, 0)
print('バスケットホッピング結果:', min_basin.x)

出力はBFGSで見つかった局所的最小値と、バスケットホッピングで確認された大域的最適値を示します。

Nelder-Meadアルゴリズム

勾配情報なしのシンプルな無制約最小化:

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('結果:', res.x, '関数値:', res.fun)

画像処理 – scipy.ndimage

画像操作:表示、反転、回転、フィルタ適用。

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Flip Down')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Rotated 135°')
plt.show()

数値積分 – scipy.integrate

自動誤差推定付きの単一・二重積分:

from scipy import integrate

# 0から1までのx^2の単一積分
single = integrate.quad(lambda x: x**2, 0, 1)
print('単一積分:', single)

# 三角形領域上の64*x*yの二重積分
double = integrate.dblquad(lambda x, y: 64*x*y, 0, 2/4,
                           lambda x: 0,
                           lambda y: (1 - 2*y**2)**0.5)
print('二重積分:', double)

両方ともタプルを返す:(値, 推定誤差)。

まとめ

SciPyはNumPyを拡張し、線形代数、最適化、統計、信号処理、画像操作を含む完全な科学計算スタックを提供します。豊富なサブパッケージと堅牢なコミュニティサポートにより、研究者とエンジニアに不可欠です。

パッケージ名説明
scipy.ioMATLAB、CSV、NetCDF等のファイル入出力
scipy.special特殊数学関数(ベッセル、ガンマ等)
scipy.linalg高度な線形代数ルーチン
scipy.interpolate補間手法
scipy.optimize最適化と曲線フィッティングツール
scipy.stats統計分布と乱数生成
scipy.integrate数値積分(quad、dblquad等)
scipy.fftpack高速フーリエ変換
scipy.signal信号処理ユーティリティ
scipy.ndimage多次元画像処理

Python

  1. Python print()関数の実践ガイド:基本から応用まで
  2. Python str.count()マスター:文字と部分文字列のカウント実例集
  3. Python format()文字列を明確な例でマスター
  4. Python String.find()メソッド完全ガイド:構文、例、代替手法
  5. Pythonラムダ関数をマスターする:実例とベストプラクティス
  6. Python abs()関数:数値と複素数の絶対値を計算
  7. Python round()関数を実例で徹底解説
  8. Python map()関数をマスター:構文、例、ベストプラクティス
  9. Python timeit():実行時間測定の実例付きガイド
  10. Python yieldをマスター:ジェネレータvs return – 実践ガイド
  11. Python type()とisinstance()の理解:実例付き解説