「NumPy」の版間の差分

編集の要約なし
 
== 目的 ==
[[Python]]は[[動的型付け|動的型付け言語]]であるため、プログラムを柔軟に記述できる一方で、純粋にPythonのみを使って[[数値計算]]を行うと、ほとんどの場合[[C言語]]や[[Java]]などの静的型付き言語で書いたコードに比べて大幅に計算時間がかかる。そこでNumPyは、Pythonに対して型付きの多次元配列オブジェクト (<code>numpy.ndarray</code>) と、その配列に対する多数の演算関数や操作関数を提供することにより、この問題を解決しようとしている。NumPyの内部はC言語(やFortran)によって実装されているため非常に高速に動作する。したがって、目的の処理を、大きな多次元配列(ベクトル・行列など)に対する演算として記述できれば([[ベクトル化]]できれば)、計算時間の大半はPythonではなくC言語による[[ネイティブコード]]で実行されるようになり大幅に高速化する。さらに、NumPyは [[BLAS]] APIを実装した行列演算ライブラリ([[OpenBLAS]]、[[Automatically Tuned Linear Algebra Software|ATLAS]]、[[Intel Math Kernel Library]] など)を使用して線形代数演算を行うため、これはC言語で単純に書かれC言語によるコード線形代数演算よりも高速に実行す動作しうる<ref>{{cite web| title = SciPy PerformancePython | url = http://scipy.org/PerformancePython | accessdate = 2009-09-28}} </ref>(速度が落ちるが BLAS ライブラリを使用しないコンパイルも可能)。
 
一般に、行列演算においてはメモリ帯域がボトルネックになる事が多い。NumPyのAPIの構造上、特に複数の演算が連なる場合に、余計なメモリの読み書きが多発する。その問題を解決し、不要なメモリの読み書きを減少させるために、NumPyを利用して動作するNumexprが開発されている<ref>[https://github.com/pydata/numexpr pydata/numexpr - GitHub]</ref>。
263

回編集