「NumPy」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
Wanson (会話 | 投稿記録)
編集の要約なし
20行目: 20行目:


== 目的 ==
== 目的 ==
[[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]] など)を使用して線形代数演算を行うため、これは単純に書かれC言語によるコードよりも高速に実行する<ref>{{cite web| title = SciPy PerformancePython | url = http://scipy.org/PerformancePython | accessdate = 2009-09-28}} </ref>(速度が落ちるが BLAS ライブラリを使用しないコンパイルも可能)。
[[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言語で単純に書線形代数演算よりも高速に動作しうる<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>。
一般に、行列演算においてはメモリ帯域がボトルネックになる事が多い。NumPyのAPIの構造上、特に複数の演算が連なる場合に、余計なメモリの読み書きが多発する。その問題を解決し、不要なメモリの読み書きを減少させるために、NumPyを利用して動作するNumexprが開発されている<ref>[https://github.com/pydata/numexpr pydata/numexpr - GitHub]</ref>。

2017年6月9日 (金) 15:08時点における版

NumPy
作者 Travis Oliphant
開発元 コミュニティ開発
初版 1995年 (1995)
最新版
1.11.2 / 2016年10月4日 (7年前) (2016-10-04)
リポジトリ ウィキデータを編集
プログラミング
言語
Python
対応OS クロスプラットフォーム
種別 数値計算
ライセンス 修正BSDライセンス
公式サイト www.numpy.org
テンプレートを表示

NumPy(ナムパイまたはナンパイ)は、プログラミング言語Pythonにおいて数値計算を効率的に行うための拡張モジュールである。効率的な数値計算を行うための型付きの多次元配列(例えばベクトルや行列などを表現できる)のサポートをPythonに加えるとともに、それらを操作するための大規模な高水準数学関数ライブラリを提供する。

沿革

NumPyの祖先であるNumericはJum Huguninらによって開発された。その後2005年にTravis Oliphantが、Numarrayの機能をNumericに組み込み、そこへ大幅な修正を加えることで、NumPyを開発した。NumPyはオープンソースソフトウェアであり、多数の開発者が寄与している。

NumPyは、Python 2.4から2.7 および Python 3.1以降で使用できる。2011年には、PyPy用NumPy APIの開発も開始された。またNumPyをCythonで記述し高速化を図っている。

目的

Python動的型付け言語であるため、プログラムを柔軟に記述できる一方で、純粋にPythonのみを使って数値計算を行うと、ほとんどの場合C言語Javaなどの静的型付き言語で書いたコードに比べて大幅に計算時間がかかる。そこでNumPyは、Pythonに対して型付きの多次元配列オブジェクト (numpy.ndarray) と、その配列に対する多数の演算関数や操作関数を提供することにより、この問題を解決しようとしている。NumPyの内部はC言語(やFortran)によって実装されているため非常に高速に動作する。したがって、目的の処理を、大きな多次元配列(ベクトル・行列など)に対する演算として記述できれば(ベクトル化できれば)、計算時間の大半はPythonではなくC言語によるネイティブコードで実行されるようになり大幅に高速化する。さらに、NumPyは BLAS APIを実装した行列演算ライブラリ(OpenBLASATLASIntel Math Kernel Library など)を使用して線形代数演算を行うため、C言語で単純に書いた線形代数演算よりも高速に動作しうる[1](速度が落ちるが BLAS ライブラリを使用しないコンパイルも可能)。

一般に、行列演算においてはメモリ帯域がボトルネックになる事が多い。NumPyのAPIの構造上、特に複数の演算が連なる場合に、余計なメモリの読み書きが多発する。その問題を解決し、不要なメモリの読み書きを減少させるために、NumPyを利用して動作するNumexprが開発されている[2]

MATLAB との比較

PythonとNumPyの組み合わせはMATLABに近い機能性を提供するため、NumPyをMATLABのフリーな代替物として使用する者もいる。いずれも動的プログラミング言語としての高い柔軟性を持ち、配列や行列を用いた高速な演算を行うことができる。両者の比較としては、MATLABはプロプライエタリ製品であり高価だが、組み込みの数学関数を多数備え、さらに様々な用途のための実用的なパッケージやSimulinkのようなツールボックスが提供されている。その一方で、NumPyは、MATLABよりも汎用的かつ現代的なプログラミング言語であるPythonに統合されており、なおかつPythonはオープンソースかつフリーである。NumPyには各種の補助的なライブラリが存在し、例えば、SciPyは、さらにMATLAB的な科学計算関数をNumPyに追加するライブラリであり、MatplotlibはMATLABライクなグラフ描画機能を提供するパッケージである。NumPyとMATLABの両者はともに、LAPACK APIを経由して、行列演算ライブラリによる演算を行なっている。

以下の例では、NumPyとmatplotlibを用いて、Pythonの対話環境における非常に単純なベクトル操作とプロットを実演している。

>>> import numpy
>>> from matplotlib import pyplot
>>> x = numpy.linspace(0, 2 * numpy.pi, 100)
>>> y = numpy.sin(x)
>>> pyplot.plot(x, y)
>>> pyplot.show()

関連項目

  • 数値解析ソフトウェア
  • SciPy - NumPyを基盤にした科学計算ライブラリ
  • matplotlib - NumPyを基盤にしたグラフ描画ライブラリ
  • Pandas - データの操作や解析のためのライブラリ
  • Sage - 幅広い分野を網羅する数学ソフトウェア

参考文献

  1. ^ SciPy PerformancePython”. 2009年9月28日閲覧。
  2. ^ pydata/numexpr - GitHub

外部リンク