「NumPy」の版間の差分

(Okipow (会話) による ID:58908226 の版を取り消し)
 
== 目的 ==
[[Python]]は[[動的型付け|動的型付言語]]であるため、プログラムを柔軟に記述できる一方で、純粋にPythonのみを使って[[数値計算]]を行うと、ほとんどの場合[[C言語]]や[[Java]]などの静的型付き言語で書いたコードに比べて大幅に計算時間がかかる。そこでNumPyは、Pythonに対して型付きの多次元配列オブジェクト (<code>numpy.ndarray</code>) と、その配列に対する多数の演算関数や操作関数を提供することによってり、この問題を解決しようとしている。NumPyの内部はC言語(やFortran)によって実装されているため非常に高速に動作する。したがって、目的の処理を、大きな多次元配列(ベクトル・行列など)に対する演算として記述できれば([[ベクトル化]]できれば)、計算時間の大半はPythonではなくC言語による[[ネイティブコード]]で実行されるようになり、そのコードか大幅に高速化する。さに、NumPyは [[BLAS]] を実装した行列演算ライブラリ([[OpenBLAS]]、[[Automatically Tuned Linear Algebra Software|ATLAS]]、[[Intel Math Kernel Library]] など)が呼び出され(低速だが BLAS ライブラリを使用しないコンパイルも可能)、行列て線形代数演算ライブラリの速度で動くを行うため、これは単純に書かれたC言語によるコードよりも高速に実行する<ref>{{cite web| title = SciPy PerformancePython | url = http://scipy.org/PerformancePython | accessdate = 2009-09-28}} </ref>(速度が落ちるが BLAS ライブラリを使用しないコンパイルも可能)
 
また一般に、行列演算においてメモリ帯域がボトルネックになる事が多い。NumPyのAPIの構造上特に複数の演算が連なる場合 NumPy の API の構造上、余計なメモリの読み書きが生してしまい、する。その問題を解決し、不要なメモリの読み書きを発生減少させないために NumPy を利用して動作する Numexpr が開発されている<ref>[https://github.com/pydata/numexpr pydata/numexpr - GitHub]</ref>。
 
=== MATLAB との比較 ===
PythonとNumPyの組み合わせは[[MATLAB]]に近い機能性を提供するため、NumPyを[[MATLAB]]のフリーな代替物として使用する者もいる。いずれも[[動的プログラミング言語]]としての高い柔軟性を持ち、配列や行列を用いた高速な演算を行うことができる。両者の比較としては、MATLABは[[プロプライエタリ]]製品であり高価だが、組み込みの数学関数を多数備え、さらに様々な用途のための実用的なパッケージや[[Simulink]]のようなツールボックスが提供されている。その一方で、NumPyは、MATLABよりも汎用的かつ現代的なプログラミング言語であるPythonに統合されており、なおかつPythonは[[FLOSS|オープンソースかつフリー]]である。NumPyには各種の補助的なライブラリが存在し、例えば、[[SciPy]]は、さらにMATLAB的な科学計算関数をNumPyに追加するライブラリであり、[[Matplotlib]]はMATLABライクなグラフ描画機能を提供するパッケージである。NumPyとMATLABの両者はともに、線形代数ライブラリの[[LAPACK]] APIを利用経由、行列演算ライブラリによる演算呼び出し行なっている。
 
== 例 ==
263

回編集