
NumPy は、Python における多次元配列(ndarray)と数値計算のためのライブラリで、科学計算・機械学習・データ解析のあらゆる場面で土台として使われています。Travis Oliphant が 2005〜2006 年に、それまで分裂していた Numeric と Numarray を統合する形で開発し、現在の地位を築きました。C で実装されたベクトル演算とブロードキャスト、線形代数・乱数・フーリエ変換などの数値計算機能を備え、pandas・SciPy・scikit-learn・PyTorch などほぼ全ての PyData ライブラリの計算基盤となっています。
この記事の目次
- ndarrayとベクトル演算の威力
- NumericからNumPyへの統合史
- 科学計算とMLでの定番利用
- PyTorch・JAXなど後継との関係
- まとめ
ndarrayとベクトル演算の威力

NumPy の中心となる ndarray は、同一の dtype(int32・float64・complex128 など)の要素を持つ多次元配列で、メモリ上に連続して配置されます。これにより、Python の for ループに比べて 50〜200 倍高速なベクトル化演算が可能になります。要素単位の加減算・乗除算は C 実装の関数呼び出し 1 回に集約され、CPU キャッシュ効率も最大化されます。
ブロードキャストと呼ばれる仕組みは、形状の異なる配列同士の演算を自動的に整合させる機能で、(3, 1) 形状と (1, 4) 形状の配列を加算して (3, 4) を得る、といった操作を直感的な式で書けるのが大きな利点です。np.einsum や np.tensordot などの高機能関数を使えば、機械学習で多用されるテンソル演算も短いコードで表現できます。
NumericからNumPyへの統合史

Python での配列計算は 1995 年に Jim Hugunin らが開発した Numeric から始まりました。後にメモリ効率を改善した Numarray が登場し、コミュニティが二分される状況が続きましたが、2005〜2006 年に Travis Oliphant が両者を統合する新プロジェクト「NumPy」を立ち上げ、1.0 を 2006 年にリリースしました。これ以降、科学計算 Python のエコシステムは NumPy に集約されていきます。
Oliphant は 2012 年に Continuum Analytics(現 Anaconda)を共同創業し、NumPy・SciPy の継続開発と Conda パッケージ管理を商業的に支援しました。2020 年以降は NEP(NumPy Enhancement Proposal)と呼ばれる仕組みで、CuPy や JAX、PyTorch といった「NumPy 風 API」を持つ他フレームワークとの互換性(Array API 標準)が進められ、Python 数値計算の共通インターフェースとしての地位を確立しています。
科学計算とMLでの定番利用

NumPy は線形代数の演算で頻繁に使われ、np.linalg.solve・inv・eig などで連立方程式・逆行列・固有値分解を瞬時に計算できます。シミュレーション科学では np.random の各種分布で乱数を生成し、モンテカルロ法やブートストラップ法の実装に欠かせません。画像処理では (H, W, C) 形状のテンソルとして画像を扱い、フィルタやアフィン変換を高速に適用できます。
scikit-learn は内部で NumPy 配列を入出力として用い、PyTorch・TensorFlow・JAX なども NumPy 互換のセマンティクスを採用しています。pandas の DataFrame も内部は NumPy 配列で表現されており、機械学習パイプラインのあらゆる箇所で NumPy が「データの最小共通項」として機能しています。Python での研究実装からプロダクション特徴量計算まで、NumPy を知らずに通ることはできません。
PyTorch・JAXなど後継との関係

GPU や TPU を使うディープラーニングの世界では、PyTorch・JAX・TensorFlow が NumPy 風の API を持ちながら自動微分とアクセラレータ実行を提供しています。CuPy は NumPy とほぼ同じ API で CUDA GPU 上の演算を可能にし、JAX は同じ書き味で XLA コンパイルを行います。NumPy 自身も SIMD 強化や PyPy/PyArrow 互換などで進化を続けていますが、巨大行列演算の主役は徐々に GPU フレームワークに移っています。
ただし、これらの後継ライブラリも NumPy 配列との相互変換を前提に設計されており、torch.from_numpy や jnp.asarray などで透過的にやり取りできます。NumPy が示した API デザインが事実上の「配列計算の共通インターフェース」になっており、Array API 標準化を通じて Python 配列エコシステム全体の協調も進んでいます。新興ライブラリの台頭はあっても、NumPy の基盤的地位は揺るがないと考えられています。
まとめ
NumPy は 2006 年の Travis Oliphant による統合以来、Python 科学計算の基礎を一貫して提供し続けています。GPU 時代の到来によって周辺ライブラリは多様化していますが、その API デザインは今もすべての配列計算ライブラリの共通言語であり、データ系エンジニアにとって必須の知識となっています。
※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

コメント