以下の内容はhttps://myenigma.hatenablog.com/entry/2025/02/06/212156より取得しました。


Pythonの科学技術計算ライブラリSciPyの概要


エレガントなSciPy ―Pythonによる科学技術計算

目次

はじめに

Pythonを使っていると

SciPy(サイパイ)という名前のライブラリの名前を

聞くことがあると思うのですが、

2020年ぐらいからメンテナーの一人として、

余暇を使って、細々と開発しています。

scipy.org

 

ただ、この話をすると、Pythonにあまり詳しくない人には、

そもそもSciPyって何?と聞かれることが多いので、

SciPyの概要について説明したいと思います。

 

SciPyとは

SciPyはプログラミング言語Pythonのための、

www.python.org

科学技術計算ライブラリです。

scipy.org

 

Pythonの多次元配列演算ライブラリである

NumPyをベースとして、

numpy.org

 

様々な科学計算のルーチンを提供しています。

例えば、数値微分、数値積分、補間、最適化、フーリエ変換、

線形代数計算、疎行列、信号処理、統計確率、n次元画像処理

などに対応しています。

 

また、SciPyは、

より各科学技術計算分野のドメインに特化した

様々なライブラリの基礎となっています。

例えば、

古典機械学習のライブラリであるscikit-learnや

scikit-learn.org

画像処理ライブラリであるscikit-image

scikit-image.org

など、様々なPythonライブラリでSciPy使われており、

Pythonの科学技術ライブラリの

ベースになっています。

 

SciPyに関する様々なリンク

SciPyのHP

メインとなる、SciPyのプロジェクトページです。

SciPyの概要を知りたい方はこちらを参照ください。

scipy.org

実はこちらのページの日本語訳を進めています。

  

SciPyの公式ドキュメント

より細かいSciPyの各APIの説明や、

チュートリアルなど、

技術的な内容に関しては

こちらのドキュメントで確認できます。

scipy.github.io

こちらのドキュメントはPythonのドキュメントビルダーである

Sphinxで自動生成されています。

myenigma.hatenablog.com

 

GitHubリンク

メインの開発が行われているGitHubリポジトリです。

コントリビュートしたい方はこちらからどうぞ。

あとGitHubのアカウントを持っている方はスターお願いします。

github.com

 

PyPIリポジトリ

ライブラリが提供されているPyPIリンクです。

最新のバージョンとかを確認できます。

https://pypi.org/project/scipy/

 

SciPy1.0のNature論文

この論文は2020年にリリースされた、

SciPy1.0を記念して書かれた学術論文です。

世界で1番有名な論文と言っても過言ではない、

Natureに掲載されています。

後述のSciPyの歴史もこちらの論文をベースにしています。

www.nature.com

 

SciPyの特徴

下記が現時点でのSciPyの特徴です。

 

またこれら以外にも、今後対応していきたいこととして、

  • 分散配列やGPU対応

  • 並列処理対応

  • より多くのハードウェア対応

などがあります。詳細はこちらを参照ください。

scipy.github.io

 

特徴1: 複数の科学領域で必要な品質の高い汎用ルーチンを広くサポート

SciPyのポリシーとして、

複数の科学領域で汎用的に利用される

計算ルーチンのみにフォーカスして、

実装されています。

その結果、限られた開発リソースで、

使いやすく、パフォーマンスも高く、

バグの少ないライブラリをキープしています。

 

特徴2: コンパイル言語のコードをラップすることによる高速演算

Pythonを使って科学技術計算をする時に、

最も問題になるのが、計算時間の遅さです。

 

Pythonはインタープリター型の

プログラミング言語なのでしょうがないのですが、

SciPyではこの問題を解決するために、

高速計算が可能なコンパイル型言語である

CやC++、FORTRANで書かれたルーチンや、

Cythonと呼ばれるPython風のコードから

C言語コードを生成するトランスパイラので生成されたルーチンを

myenigma.hatenablog.com

Pythonから使えるようにWrapすることで、

Pythonから簡単に使えるにもかかわらず、

内部の複雑な処理は非常に高速に計算できます。

このパフォーマンスの高さもSciPyの大きな特徴です。

 

特徴3: 修正BSDライセンスによるOSS

SciPyは、

比較的寛容なOSSライセンスとして言われる

修正BSDライセンスで公開され、

オープンに開発されています。

wa3.i-3-i.info

商用システムにも使いやすいですし、

OSSとしても貢献しやすいのが特徴です。

 

特徴4: 充実したドキュメント

SciPyはAPIドキュメントや

チュートリアルが充実しています。

scipy.github.io

 

前述の通り、このドキュメントはSphinxで

コードコメントを元に生成されているので、

すべてコードと同様にgitで管理されており、

ドキュメントが古新聞になりにくい仕組みを採用しています。

 

SciPyの歴史

SciPyの開発が始まる前の1995年に、

あるMITの大学院生の提案で、

Pythonをベースに高次元の配列ライブラリである、

Numericが開発されました。

qwone.com

 

このNumericの開発で面白いのは、

Pythonの作者でもある

グイドバンロッサムも開発に参加しており、

ja.wikipedia.org

Numericを開発するために、

Python本体の機能拡張もしていったことです。

このように、

科学技術言語に汎用的な機能を入れるのではなく、

汎用的な言語に、科学技術計算の機能を入れていったのが、

その後のPythonの科学技術分野での発展に寄与していきます。

 

1990年の後半になると、

博士課程の学生だったTravis Oliphantが

en.wikipedia.org

この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の代表的なユースケース

こちらの記事を参照ください。

myenigma.hatenablog.com

 

SciPyの各サブモジュール

前述の通り、SciPyは様々な種類の科学技術計算に対応していますが、

各分野事にサブモジュールに分割され、管理されています。

詳細はこちらの記事を参照ください。

myenigma.hatenablog.com

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com


エレガントなSciPy ―Pythonによる科学技術計算

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com




以上の内容はhttps://myenigma.hatenablog.com/entry/2025/02/06/212156より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14