目次
- 目次
- はじめに
- SciPyとは
- SciPyに関する様々なリンク
- SciPyの特徴
- SciPyの歴史
- SciPyの代表的なユースケース
- SciPyの各サブモジュール
- 参考資料
- MyEnigma Supporters
はじめに
Pythonを使っていると
SciPy(サイパイ)という名前のライブラリの名前を
聞くことがあると思うのですが、
2020年ぐらいからメンテナーの一人として、
余暇を使って、細々と開発しています。
ただ、この話をすると、Pythonにあまり詳しくない人には、
そもそもSciPyって何?と聞かれることが多いので、
SciPyの概要について説明したいと思います。
SciPyとは
SciPyはプログラミング言語Pythonのための、
科学技術計算ライブラリです。
Pythonの多次元配列演算ライブラリである
NumPyをベースとして、
様々な科学計算のルーチンを提供しています。
例えば、数値微分、数値積分、補間、最適化、フーリエ変換、
線形代数計算、疎行列、信号処理、統計確率、n次元画像処理
などに対応しています。
また、SciPyは、
より各科学技術計算分野のドメインに特化した
様々なライブラリの基礎となっています。
例えば、
古典機械学習のライブラリであるscikit-learnや
画像処理ライブラリであるscikit-image
など、様々なPythonライブラリでSciPy使われており、
Pythonの科学技術ライブラリの
ベースになっています。
SciPyに関する様々なリンク
SciPyのHP
メインとなる、SciPyのプロジェクトページです。
SciPyの概要を知りたい方はこちらを参照ください。
実はこちらのページの日本語訳を進めています。
SciPyの公式ドキュメント
より細かいSciPyの各APIの説明や、
チュートリアルなど、
技術的な内容に関しては
こちらのドキュメントで確認できます。
こちらのドキュメントはPythonのドキュメントビルダーである
Sphinxで自動生成されています。
GitHubリンク
メインの開発が行われているGitHubリポジトリです。
コントリビュートしたい方はこちらからどうぞ。
あとGitHubのアカウントを持っている方はスターお願いします。
PyPIリポジトリ
ライブラリが提供されているPyPIリンクです。
最新のバージョンとかを確認できます。
https://pypi.org/project/scipy/
SciPy1.0のNature論文
この論文は2020年にリリースされた、
SciPy1.0を記念して書かれた学術論文です。
世界で1番有名な論文と言っても過言ではない、
Natureに掲載されています。
後述のSciPyの歴史もこちらの論文をベースにしています。
SciPyの特徴
下記が現時点でのSciPyの特徴です。
またこれら以外にも、今後対応していきたいこととして、
分散配列やGPU対応
並列処理対応
より多くのハードウェア対応
などがあります。詳細はこちらを参照ください。
特徴1: 複数の科学領域で必要な品質の高い汎用ルーチンを広くサポート
SciPyのポリシーとして、
複数の科学領域で汎用的に利用される
計算ルーチンのみにフォーカスして、
実装されています。
その結果、限られた開発リソースで、
使いやすく、パフォーマンスも高く、
バグの少ないライブラリをキープしています。
特徴2: コンパイル言語のコードをラップすることによる高速演算
Pythonを使って科学技術計算をする時に、
最も問題になるのが、計算時間の遅さです。
Pythonはインタープリター型の
プログラミング言語なのでしょうがないのですが、
SciPyではこの問題を解決するために、
高速計算が可能なコンパイル型言語である
CやC++、FORTRANで書かれたルーチンや、
Cythonと呼ばれるPython風のコードから
C言語コードを生成するトランスパイラので生成されたルーチンを
Pythonから使えるようにWrapすることで、
Pythonから簡単に使えるにもかかわらず、
内部の複雑な処理は非常に高速に計算できます。
このパフォーマンスの高さもSciPyの大きな特徴です。
特徴3: 修正BSDライセンスによるOSS
SciPyは、
比較的寛容なOSSライセンスとして言われる
修正BSDライセンスで公開され、
オープンに開発されています。
商用システムにも使いやすいですし、
OSSとしても貢献しやすいのが特徴です。
特徴4: 充実したドキュメント
SciPyはAPIドキュメントや
チュートリアルが充実しています。
前述の通り、このドキュメントはSphinxで
コードコメントを元に生成されているので、
すべてコードと同様にgitで管理されており、
ドキュメントが古新聞になりにくい仕組みを採用しています。
SciPyの歴史
SciPyの開発が始まる前の1995年に、
あるMITの大学院生の提案で、
Pythonをベースに高次元の配列ライブラリである、
Numericが開発されました。
このNumericの開発で面白いのは、
Pythonの作者でもある
グイドバンロッサムも開発に参加しており、
Numericを開発するために、
Python本体の機能拡張もしていったことです。
このように、
科学技術言語に汎用的な機能を入れるのではなく、
汎用的な言語に、科学技術計算の機能を入れていったのが、
その後のPythonの科学技術分野での発展に寄与していきます。
1990年の後半になると、
博士課程の学生だったTravis Oliphantが
このNumericをベースにした
科学技術計算のいくつかのパッケージを
公開しました。
その後、世界中の大学の大学院生が、
Numericをベースにした様々なパッケージを公開し始め、
2001年にTravis Oliphantが立ち上げた、
Enthought Scientific Computing Solutions
という会社を中心に、それらのパッケージを集めた
SciPy Projectが開始されます。
これがSciPyの始まりです。
その後、このSciPyは人気が世界中の
研究機関に広がり、
ハッブル望遠鏡のデータ解析に使われたりし始めます。
しかし、様々な用途で使われ始めると、
Numericが小さいサイズの配列では効率的に計算できるのですが、
大きなサイズのデータでは効率が下がってしまう
問題が深刻になってしまいました。
そこで、
NumArrayという大規模な配列用のライブラリが開発されましたが、
今度は小さいサイズでの配列処理の効率が悪くなり、
最新的に、2001年にTravis Oliphantが、
NumericとNumArrayのいいとこ取りをして、
小さいサイズでも、大きなサイズでも
効率的な配列計算ができるNumPyを開発して、
今のNumPyとSciPyの
アーキテクチャが出来上がりました。
その後は、元々はSciPyの一部だった
いくつかの技術分野のルーチンを
scikit projectに移管し、
より本質的な科学技術計算の分野のルーチンにフォーカスしつつ、
ドキュメントやリリースプロセスが改善されて、
今に至ります。
SciPyの代表的なユースケース
こちらの記事を参照ください。
SciPyの各サブモジュール
前述の通り、SciPyは様々な種類の科学技術計算に対応していますが、
各分野事にサブモジュールに分割され、管理されています。
詳細はこちらの記事を参照ください。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。
