
現場で使える!Python科学技術計算入門 NumPy/SymPy/SciPy/pandasによる数値計算・データ処理手法
目次
- 目次
- はじめに
- SciPyのサブモジュール
- scipy.cluster: クラスタリング
- scipy.constants: 物理数学定数
- scipy.datasets: データセット
- scipy.differentiate: 数値微分
- scipy.fft: フーリエ変換
- scipy.integrate: 数値積分
- scipy.interpolate: 補間
- scipy.io: データ入出力
- scipy.linalg: 線形代数
- scipy.ndimage: n-次元画像処理
- scipy.odr: 直交距離回帰
- scipy.optimize: 最適化
- scipy.signal: 信号処理
- scipy.sparse: 疎行列
- scipy.spatial: 空間データ構造とアルゴリズム
- scipy.special: 特殊関数
- scipy.stats: 統計・確率処理
- 参考資料
- MyEnigma Supporters
はじめに
先日、Pythonの科学計算ライブラリである
SciPyの概要を説明しました。
こちらの記事でも説明した通り、
SciPyは様々な種類の科学計算に対応しているのですが、
使いやすいように、
それぞれの分野毎にサブモジュールで分割されています。
今回の記事では、
どんなサブモジュールがあるかを一覧で確認しつつ、
各公式ドキュメント(APIドキュメントやチュートリアル)へのリンクを
まとめた記事にしたいと思います。
今後、各サブモジュールの、より深い説明の記事も作成予定です。
SciPyのサブモジュール
scipy.cluster: クラスタリング
名前の通り、データを自動的に分類する
クラスタリング関連のルーチンがまとまったサブモジュールです。
現時点では、大きく分けて2つのルーチン群が実装されており、
ベクトル量子化とkmean法によるクラスタリングに対応したvq(サブサブ)モジュールと
階層的クラスタリングとその可視化用のルーチンを実装した
hierarchyモジュールが実装されています。
APIドキュメント:
scipy.constants: 物理数学定数
このサブモジュールは、
物理や数学の定数がまとめられたサブモジュールです。
Pythonで、このような定数を使う場合は、
自分で実装するのではなく、
SciPyが定義しているパラメータを使うことができます。
APIドキュメント:
scipy.datasets: データセット
このサブモジュールは比較的最近導入されたものですが、
いくつかの科学演算の例やユニットテストで使う
データセットを取得するための
サブモジュールです。
SciPyのバイナリのサイズをできるだけ小さくするために、
このようなデータセットは、関数を呼ぶと、
ネットワーク経由でデータをダウンロードし、
そのデータをキャッシュできるような仕組みを使っています。
今回のリリースの一つ目の目玉は、新しいサブモジュールである、scipy.datasetsが追加されたことです。このサブモジュールは画像処理や信号処理のデモのためのサンプルデータを、GitHub上のデータセット用のリポジトリからダウンロードすることができます。https://t.co/ZrXUTLfC6A
— Atsushi Sakai (@Atsushi_twi) 2023年1月4日
このデータセットのダウンロードシステムには、こちらのpoochというパッケージを利用したキャッシュシステムがあり、一度DLするとネットワークが繋がってない状況でもキャッシュのデータを利用するようになります。今後様々なデータセットが追加予定です。https://t.co/aWO6dk3V1c
— Atsushi Sakai (@Atsushi_twi) 2023年1月4日
現在はデータセットとして、
画像データや信号処理用の信号データが提供されています。
APIドキュメント:
scipy.differentiate: 数値微分
こちらのサブモジュールも比較的最近導入されたものですが、
ある、ブラックボックスの関数に対して、
数値微分をするルーチンが集まったサブモジュールです。
APIドキュメント:
scipy.fft: フーリエ変換
こちらのサブモジュールは、
名前の通りですが、フーリエ変換を実施するルーチンのサブモジュールです。
元々は、FFTPACKいうFORTRANのフーリエ変換ライブラリをラップしたものを
scipy.fftpackというサブモジュールで提供していましたが、
そちらはすでにメンテナンスがストップされており、
scipy.fftに統合されています。
APIドキュメント:
チュートリアル :
scipy.integrate: 数値積分
このサブモジュールも名前の通り、
ある特定の関数に対して、
数値積分をするルーチンを集めたサブモジュールです。
API ドキュメント:
チュートリアル:
scipy.interpolate: 補間
こちらのサブモジュールは、
様々な次元の様々なデータの補間を実施するための
ルーチンを集めたサブモジュールです。
API ドキュメント:
チュートリアル:
参考記事:
scipy.io: データ入出力
こちらは、様々なデータファイルを
読み書きするためのサブモジュールです。
例えば、下記のようなファイルの読み書きができます。
MATLABファイル
IDLファイル
Matrix Marketファイル
Unformatted Fortranファイル
Netcdfファイル
Harwell-Boeingファイル
Wav音声ファイル
Arffファイル
また、NumPyにもいくつかファイル読み書き用のルーチン群があります。
API ドキュメント:
チュートリアル:
scipy.linalg: 線形代数
線形代数のルーチンをまとめたサブモジュールです。
NumPyにも同じようなサブモジュールがありますが、
SciPyの方は、LAPACKやBLASをラップしたものになっており、
APIの網羅性は高いですが、
NumPyの方は、FORTRAN無しでビルドできるような形で部分的に実装されています。
API ドキュメント:
チュートリアル:
scipy.ndimage: n-次元画像処理
こちらは、n次元の画像処理を実施する
ルーチンが集まったサブパッケージです。
二次元の画像の場合は、OpenCVやPILなどのモジュールを使うことができますが、
より複雑な画像データを取り扱う医療関連や物理学関連の画像処理に
よく使われています。
今回のリリースで一番大きなものは、scipyの画像処理モジュールであるndimageが大規模改善されたことです。通常の2次元画像を扱うライブラリはOpenCVやscikit-imageなど色々ありますが、ndimageはより多次元の画像処理に特化しており、医療画像や生物学の画像処理でよく使われている(らしい)です。
— Atsushi Sakai (@Atsushi_twi) 2021年1月1日
また、1.6.0からndimage複素数を取り扱えるようになり、一部の物理学の人達はかなり喜んでいるみたいです。またndimageのチュートリアルが作られました。(この部分は自分が少しお手伝いしました)。今回のndimageの改善と大量のバグfixはnumfocusの出資を受けて実施されました。https://t.co/Z76tVx0POn
— Atsushi Sakai (@Atsushi_twi) 2021年1月1日
ちなみに、たまにscipy.ndimageって誰が使っているんですか?って聞かれることがあるのですが、去年話題になった初めてブラックホールを撮影したプロジェクトでは、scipyのndimageがめっちゃ使われています。https://t.co/JDkXP4H7Lh
— Atsushi Sakai (@Atsushi_twi) 2021年1月1日
API ドキュメント:
チュートリアル:
scipy.odr: 直交距離回帰
こちらは、Fortranの直行距離回帰ライブラリである
ODRPACKをラップしたサブモジュールです。
API ドキュメント:
scipy.optimize: 最適化
こちらは最適化用のルーチンが集まった、
サブモジュールです。
単純な数理最適化のルーチンだけでなく、
数理最適化を使った、曲線フィッティングなどの
ルーチンも提供しています。
API ドキュメント:
チュートリアル:
参考記事:
scipy.signal: 信号処理
こちらは信号処理におけるフィルタリングや
補間ルーチンが集まったライブラリです。
API ドキュメント:
チュートリアル:
scipy.sparse: 疎行列
こちらのパッケージは、
疎行列を生成するためのルーチンや、
疎行列用の線形代数サブサブパッケージであるscipy.sparse.linalg
疎行列をベースとしたグラフ理論処理用のサブサブパッケージであるscipy.sparse.csgraph
が提供されているサブパッケージです。
API ドキュメント:
チュートリアル:
scipy.spatial: 空間データ構造とアルゴリズム
こちらは、Computational geometryの分野である
空間データ構造やアルゴリズムが集まったサブパッケージです。
例えば、
ドロネー分解
最近傍探索のためのKDTree
座標変換
などのルーチンが提供されています。
API ドキュメント:
チュートリアル:
参考記事:
scipy.special: 特殊関数
こちらは、数学や物理学で使用される特殊関数(ベータ関数や、ガンマ関数など)
をまとめたサブモジュールです。
API ドキュメント:
チュートリアル:
scipy.stats: 統計・確率処理
こちらは統計・確率関連のルーチンが集まったサブモジュールです。
連続な確率密度関数から、
統計検定、サンプリング関連のルーチンが提供されています。
API ドキュメント:
チュートリアル:
参考資料

現場で使える!Python科学技術計算入門 NumPy/SymPy/SciPy/pandasによる数値計算・データ処理手法
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。