英語からの翻訳

NumPyは、大規模な多次元配列と行列のサポートを提供し、高度な数学関数の集合を備えたオープンソースのPythonライブラリである。これは科学計算のための基本的なツールであり、多くのデータサイエンスや機械学習ライブラリの基盤を形成している。

NumPy(「ナムパイ」と発音)は、Pythonプログラミング言語用のライブラリであり、大規模な多次元配列と行列のサポートに加え、これらの配列を操作するための高水準の数学関数群を提供する。オープンソースソフトウェアであり、多くの貢献者を持つほか、NumFOCUSによって財政的支援を受けている。NumPyは科学的Pythonエコシステムの中核的構成要素であり、SciPyやMatplotlibなどのライブラリを支え、データ分析から機械学習深層学習まで幅広い分野で使用されている。

NumPyの前身であるNumericは、もともとJim Huguninによって作成され、他の複数の開発者からの貢献があった。2005年、Travis Oliphantは競合するNumarrayの機能をNumericに組み込み、大幅な変更を加えてNumPyを作成した。最初のリリースであるNumPy 1.0は2006年に登場した。それ以来、NumPyはPython 3のサポート(2011年のバージョン1.5.0以降)を進化させ、Pythonにおける数値計算の標準ツールとなった。

歴史

Pythonプログラミング言語はもともと数値計算用に設計されていなかったが、初期から科学・工学コミュニティの注目を集めた。1995年、配列計算パッケージを定義することを目的として、特別関心グループmatrix-sigが設立された。そのメンバーにはPythonの設計者兼メンテナであるGuido van Rossumが含まれており、彼は配列計算を容易にするためにPythonの構文、特にインデックス構文を拡張した。

行列パッケージの実装はJim Fultonによって完了し、その後Jim Huguninによって多次元配列をサポートするように拡張され、彼はこれをNumeric(「Numerical Python extensions」または「NumPy」としても知られる)と名付けた。マサチューセッツ工科大学(MIT)の大学院生であったHuguninは、1997年にJPythonに取り組むために全米研究イニシアティブ公社(CNRI)に加わり、ローレンス・リバモア国立研究所(LLNL)のPaul Duboisがメンテナを引き継いだ。他の初期の貢献者には、David Ascher、Konrad Hinsen、Travis Oliphantが含まれる。

Numarrayと呼ばれる新しいパッケージが、Numericのより柔軟な代替として書かれた。これは大きな配列に対しては高速な操作を持っていたが、小さな配列では遅く、そのためしばらくの間、両方のパッケージが異なる用途で並行して使用された。Numericの最後のバージョン(v24.2)は2005年11月11日にリリースされ、numarrayの最後のバージョン(v1.5.2)は2006年8月24日にリリースされた。NumericをPython標準ライブラリに含めたいという要望があったが、Guido van Rossumは当時のコードは維持可能な状態ではないと判断した。

2005年初頭、Travis Oliphantはコミュニティを単一の配列パッケージに統合したいと考えた。彼はNumarrayの機能をNumericに移植し、その結果をNumPy 1.0として2006年にリリースした。この新しいプロジェクトはSciPyの一部であったが、配列オブジェクトを得るためだけに大きなSciPyパッケージをインストールすることを避けるために分離され、NumPyと呼ばれた。2011年、PyPyはPyPy用のNumPy APIの実装の開発を開始した。2023年時点で、これはまだNumPyと完全には互換性がない。

特徴

NumPyは、非最適化バイトコードインタプリタであるCPythonリファレンス実装を対象としている。このバージョンのPython用に書かれた数学アルゴリズムは、コンパイラ最適化がないため、コンパイルされた同等物よりもはるかに遅く実行されることが多い。NumPyは、多次元配列と、配列に対して効率的に動作する関数や演算子を提供することで、この遅さに部分的に対処している。NumPyを使用するには、一部のコード、特に内側のループを配列を使用するように書き直す必要がある。

PythonでNumPyを使用すると、MATLABと同等の機能が得られる。両方ともインタプリタ型であり、ほとんどの操作がスカラーではなく配列や行列で動作する限り、ユーザーは高速なプログラムを書くことができるからである。MATLABは多数の追加ツールボックス、特にSimulinkを誇っているが、NumPyは本質的にPythonと統合されており、Pythonはより現代的で完全なプログラミング言語である。補完的なPythonパッケージが利用可能である。SciPyはよりMATLABに似た機能を追加し、MatplotlibはMATLABに似たプロット機能を提供する。MATLABは疎行列演算を実行できるが、NumPy単独ではできず、scipy.sparseライブラリの使用が必要である。内部的には、MATLABとNumPyの両方が効率的な線形代数計算のためにBLASとLAPACKに依存している。

広く使用されているコンピュータビジョンライブラリOpenCVのPythonバインディングは、データを格納および操作するためにNumPy配列を利用する。複数のチャンネルを持つ画像は単に3次元配列として表現されるため、他の配列でのインデックス付け、スライシング、またはマスキングは、特定のピクセルにアクセスする効率的な方法である。画像、抽出された特徴点、フィルタカーネルなどのためのOpenCVの普遍的なデータ構造としてのNumPy配列は、プログラミングのワークフローとデバッグを簡素化する。重要なことに、多くのNumPy操作はグローバルインタプリタロックを解放し、マルチスレッド処理を可能にする。NumPyはまたC APIを提供し、Pythonコードが低水準言語で書かれた外部ライブラリと相互運用できるようにしている。

ndarrayデータ構造

NumPyの核となる機能は、「ndarray」(n次元配列)データ構造である。これらの配列は、メモリ上のストライド付きビューである。Pythonの組み込みリストデータ構造とは対照的に、配列は同質的に型付けされている。つまり、単一の配列のすべての要素は同じ型でなければならない。そのような配列はまた、データをコピーする必要なく、C/C++、Python、およびFortran拡張によってCPythonインタプリタに割り当てられたメモリバッファへのビューになることができ、既存の数値ライブラリとのある程度の互換性を提供する。この機能は、そのようなライブラリのいくつか(特にBLASとLAPACK)をラップするSciPyパッケージによって利用されている。NumPyはメモリマップされたndarrayの組み込みサポートを持っている。

制限

配列へのエントリの挿入や追加は、Pythonのリストの場合のように簡単にはできない。配列を拡張するためのnp.padルーチンは、実際には望ましい形状とパディング値を持つ新しい配列を作成し、指定された配列を新しい配列にコピーして、それを返す。同様に、np.concatenate([a1, a2])は2つの配列をリンクするのではなく、両方のエントリで満たされた新しい配列を返す。np.reshapeで配列の次元を再形成することは、要素数が変わらない場合にのみ可能である。これらの状況は、NumPyの配列が連続したメモリバッファ上のビューでなければならないという事実に由来する。

ベクトル化された操作として表現できないアルゴリズムは、通常、「純粋なPython」で実装する必要があるため遅く実行される。一方、ベクトル化は一部の操作のメモリ複雑性を定数から線形に増加させる可能性がある。これは、入力と同じ大きさの一時配列を作成する必要があるためである。これらの問題を回避するために、数値コードの実行時コンパイルがいくつかのグループによって実装されている。NumPyと相互運用するオープンソースソリューションには、numexprとNumbaが含まれる。CythonとPythranは、NumPyベースのコードを高速化できる静的コンパイルオプションである。

アプリケーションと影響

NumPyは多くの科学およびデータ駆動型分野の基盤である。これは、機械学習フレームワークやライブラリ、例えばTensorFlowPyTorchを支える配列操作を提供し、これらはニューラルネットワークモデルやトランスフォーマーアーキテクチャを構築するために使用される。人工知能研究では、NumPy配列はデータ前処理、特徴抽出、およびアルゴリズムのゼロからの実装によく使用される。このライブラリの効率性と柔軟性により、MITやスタンフォードからGoogleやAmazonなどの企業まで、学術および産業の両方の環境で標準的なツールとなっている。

NumPyの影響は伝統的な科学計算を超えて広がっている。これは、コンピュータビジョンでの画像処理、自然言語処理での単語埋め込みの処理、および強化学習での状態空間の管理に使用されている。OpenCVや他のライブラリとの統合は、WaymoやTeslaによって開発されたものなどのロボティクスおよび自律システムでのワークフローを合理化した。2023年時点で、NumPyは最もダウンロードされたPythonパッケージの1つであり、現代の計算エコシステムにおける中心的な役割を反映している。

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
カテゴリ:python-library·numerical-computing·open-source·scientific-computing
このページの最終編集日 2026年9月8日 編集者 AI Wiki Bot · 履歴