Python

NumPyとは?読み方・インストール・基本的な使い方をPythonで解説

NumPyは、Pythonで数値計算や配列処理を高速に行うための定番ライブラリです。データ分析や機械学習を学び始めると必ずと言ってよいほど登場しますが、「そもそも何ができるのか」「どう読むのか」「どうやって使い始めるのか」でつまずく人も少なくありません。この記事では、NumPyの概要と読み方から、インストール方法、配列(ndarray)の基本操作、高速な理由、よく使う関数までを、初めての人にもわかるように順を追って解説します。掲載しているコードはすべて実際に動作を確認したものです。

まとめ

NumPy(ナンパイ)は、Pythonで数値計算を高速・効率的に行うための基盤ライブラリです。中心となるndarrayを使えば、配列の作成・変形・統計・線形代数といった処理を短いコードで書け、C言語実装とベクトル化のおかげで標準リストより大幅に高速に動きます。まずは pip install numpy でインストールし、np.array での配列作成や基本的な演算から手を動かしてみるのが上達の近道です。PandasやMatplotlibと組み合わせれば、データの前処理から可視化までを一貫して行えるようになります。

NumPyとは?Pythonの数値計算を支えるライブラリ

NumPy(読み方は「ナンパイ」、または「ナムパイ」)は、Numerical Python の略で、Pythonで数値計算を効率的に行うためのオープンソースライブラリです。中心となるのは ndarray(エヌディーアレイ)と呼ばれる多次元配列オブジェクトで、ベクトルや行列といった数学的なデータ構造をまとめて高速に扱えます。

NumPyは、開発者のTravis Oliphant氏が2005年に開発を始め、2006年に「NumPy 1.0」として公開されました。前身にはNumericやNumarrayといった数値計算ライブラリがあり、それらを統合・発展させたものがNumPyです。現在はコミュニティによって活発に開発が続けられ、2024年6月にはメジャーバージョンのNumPy 2.0がリリースされ、2026年時点では2.4系が最新となっています。

科学技術計算やデータサイエンスの分野でPythonが広く使われるようになった背景には、このNumPyの存在があります。後述するPandasやSciPy、scikit-learnといった主要ライブラリの多くがNumPyを土台として作られており、Pythonのデータ処理エコシステムの「共通基盤」と言える存在です。

NumPyを使う3つのメリット

1. 計算が圧倒的に速い

NumPyの配列は、Python標準のリストに比べて大量の数値をはるかに高速に処理できます。後述のとおり中核部分がC言語などで実装されているため、同じ計算でも環境によっては数倍から数十倍の差が出ることもあります。大規模なデータを扱う場面ほど、この差は効いてきます。

2. 数値計算の関数が豊富

配列の作成・変形といった基本操作から、統計、線形代数、フーリエ変換、乱数生成まで、数値計算に必要な関数が一通りそろっています。複雑な計算も短いコードで表現でき、自分でアルゴリズムを書き起こす手間を大きく減らせます。

3. 他のライブラリと連携しやすい

データ分析のPandasや可視化のMatplotlib、科学計算のSciPyなど、多くのライブラリがNumPy配列を入出力として扱えます。前処理から分析、可視化までを一貫した流れで進められるのは、NumPyを共通言語とするエコシステムがあるからです。

NumPyのインストールと最初の一歩

NumPyはPython本体に標準では含まれていないため、別途インストールが必要です。パッケージ管理ツールのpipを使えば、Windows・Mac・Linuxのいずれでも次の1行で導入できます(コマンドプロンプトやターミナルで実行します)。

pip install numpy

近年はuvやAnacondaといった環境管理ツールも普及しており、これらを使っている場合はそれぞれの方法(例:uv add numpyconda install numpy)でも導入できます。インストールが終わったら、Pythonで正しく読み込めるかとバージョンを確認しておきましょう。慣習として np という別名でインポートします。

import numpy as np

print(np.__version__)   # 例: 2.4.4

a = np.array([1, 2, 3])
print(a)                # [1 2 3]
print(a + 1)            # [2 3 4]
print(np.sum(a))        # 6

バージョン番号が表示され、配列が正しく出力されればインストールは成功です。ここからが実際の使い方になります。

ndarrayの基本的な使い方:作成・変形・データ型

NumPyの操作は、すべて多次元配列 ndarray を中心に進みます。まずは配列の作り方から見ていきましょう。

import numpy as np

a = np.array([1, 2, 3])          # リストから作成
z = np.zeros((2, 3))             # すべて0の2×3配列
o = np.ones(3)                   # すべて1の配列
r = np.arange(5)                 # 0〜4の連番  -> [0 1 2 3 4]
l = np.linspace(0, 1, 5)         # 0〜1を5等分 -> [0. 0.25 0.5 0.75 1.]

作成した配列の形状や要素のデータ型は、shapedtype で確認できます。NumPyの配列は「同じ型のデータ」をまとめて持つのが特徴で、型を明示的に指定するとメモリ使用量を細かく制御できます。

b = np.array([[1, 2, 3], [4, 5, 6]])
print(b.shape)   # (2, 3) … 2行3列
print(b.dtype)   # int64

f = np.array([1, 2, 3], dtype=np.float64)
print(f.dtype)   # float64

配列の形を変えたり、一部を取り出したりする操作も簡単です。reshape で次元を変更、T で転置、flatten で1次元化できます。スライスや条件による抽出(ブールインデックス)も直感的に書けます。

m = np.arange(6)
print(m.reshape(2, 3))   # [[0 1 2]
                         #  [3 4 5]]
print(m.reshape(2, 3).T) # 転置

arr = np.array([10, 20, 30, 40, 50])
print(arr[1:4])          # [20 30 40]  … スライス
print(arr[arr > 25])     # [30 40 50]  … 条件で抽出

多次元配列を扱ううえで重要になるのが「軸(axis)」の考え方です。2次元配列では axis=0 が縦方向(列ごと)、axis=1 が横方向(行ごと)を指します。集計関数に軸を指定することで、列ごと・行ごとといった方向別の計算ができます。初学者がつまずきやすいポイントですが、ここを押さえると一気に応用が利くようになります。

b = np.array([[1, 2, 3], [4, 5, 6]])
print(np.sum(b))          # 21        … 全体の合計
print(np.sum(b, axis=0))  # [5 7 9]   … 列ごとの合計
print(np.sum(b, axis=1))  # [ 6 15]   … 行ごとの合計
print(np.mean(b, axis=0)) # [2.5 3.5 4.5] … 列ごとの平均

NumPyが高速な理由:C言語実装とベクトル化

NumPyの大きな魅力は処理速度です。その理由は主に3つあります。

1つ目は、中核部分がC言語やFortranで実装されていることです。Pythonはインタープリタ型で1行ずつ実行するため数値計算では遅くなりがちですが、NumPyは重い計算を高度に最適化された低レベルコードに任せることで、この弱点を回避しています。行列演算では内部的にBLASやLAPACKといった専用ライブラリも利用されます。

2つ目は、メモリ効率です。ndarrayはデータを連続したメモリ領域にまとめて格納するため、CPUキャッシュを効率よく使え、アクセスが高速になります。要素ごとにポインタをたどるPythonのリストとは、ここが根本的に異なります。

3つ目は、ベクトル化とブロードキャストです。ベクトル化とは、ループを書かずに配列全体へ一括で演算を適用する書き方で、ループのオーバーヘッドを大きく削減できます。ブロードキャストは、形の異なる配列どうしの演算で、自動的に形をそろえて計算してくれる仕組みです。

# ベクトル化:ループ不要で配列全体に演算
v = np.array([1, 2, 3])
print(v * 2)             # [2 4 6]

# ブロードキャスト:形の違う配列を自動で揃える
x = np.array([1, 2, 3])
y = np.array([[10], [20], [30]])
print(x + y)
# [[11 12 13]
#  [21 22 23]
#  [31 32 33]]

どれくらい速いかは、標準リストとの比較で実感できます。次のコードを自分の環境で実行すると、NumPyの方が大幅に速いことが確認できます(差はハードウェアやデータ量によって変わります)。

import numpy as np
import time

n = 10_000_000
# 標準リスト
lst = list(range(n))
start = time.time()
lst = [x * 2 for x in lst]
print("list :", time.time() - start, "秒")

# NumPy
arr = np.arange(n)
start = time.time()
arr = arr * 2
print("numpy:", time.time() - start, "秒")

よく使うNumPy関数一覧

NumPyには膨大な関数がありますが、まず押さえておきたい代表的なものを分類別にまとめます。

分類 主な関数 用途
配列の作成 array / zeros / ones / arange / linspace 配列を生成する
形状の操作 reshape / flatten / transpose / concatenate 変形・結合・分割
統計 mean / median / std / var / sum 平均・中央値・分散など
線形代数 dot / linalg.inv / linalg.det / linalg.eig 行列積・逆行列・固有値
乱数 default_rng / random / integers シミュレーション用の乱数
入出力 save / load / savetxt / loadtxt 配列の保存・読み込み

たとえば統計と線形代数は、次のように数行で実行できます。

data = np.array([1, 2, 3, 4, 5])
print(np.mean(data))   # 3.0   平均
print(np.median(data)) # 3.0   中央値
print(np.std(data))    # 約1.414 標準偏差(実際は 1.4142135623730951 と表示)

mat = np.array([[1, 2], [3, 4]])
print(np.dot(mat, mat))   # 行列積
print(np.linalg.det(mat)) # 行列式(数学的には -2.0。浮動小数点の都合で -2.0000000000000004 と表示される)

なお乱数生成は、再現性を確保しやすい np.random.default_rng() を使う方法が現在は推奨されています。

rng = np.random.default_rng(seed=0)
print(rng.integers(0, 10, 5))   # 例: [8 6 5 2 3]

標準リストとNumPy配列の違い

「Pythonのリストがあるのに、なぜNumPyが必要なのか」という疑問はよく聞かれます。リストは型の異なる要素も格納できる汎用的な入れ物ですが、数値計算には最適化されていません。一方NumPyの配列は、同じ型のデータを連続メモリにまとめて持ち、ベクトル化された演算を使うことで、大量データの計算を高速かつ少ないメモリで処理できます。

また、標準ライブラリのmathモジュールは1つの数値に対する基本的な数学関数を提供しますが、配列全体への一括演算や線形代数・統計といった高度な計算には向きません。こうした処理を簡潔に書けることが、数値計算でNumPyが選ばれる理由です。少量のデータを柔軟に扱うならリスト、大量の数値をまとめて計算するならNumPy、と使い分けるとよいでしょう。

NumPyと他ライブラリの連携

NumPyは単体でも便利ですが、他のライブラリと組み合わせることで真価を発揮します。表形式のデータ分析にはPandas、グラフによる可視化にはMatplotlib、より高度な科学計算にはSciPyが定番で、いずれもNumPy配列を中心にデータをやり取りします。

たとえば、NumPyで前処理した配列をPandasのデータフレームに渡して集計し、その結果をMatplotlibでグラフ化する、という流れが自然につながります。SciPyはNumPyを土台に、最適化・信号処理・統計検定といった専門的な計算を追加するライブラリです。機械学習のscikit-learnやディープラーニングのフレームワークも、学習データをNumPy配列として受け取るのが基本で、データの前処理段階でNumPyを多用します。NumPyがどんな場面で使われるかは、AIエンジニアリングの文脈で見るとイメージしやすいでしょう。

NumPy 2.x時代に押さえておきたいこと

2024年6月のNumPy 2.0は、約18年ぶりのメジャーアップデートとして注目されました。一部のAPIや型の挙動に互換性のない変更が含まれているため、古い記事のコードや既存プロジェクトをそのまま動かすと、警告やエラーが出ることがあります。新しく学ぶなら最新の2.x系を前提に進めて問題ありませんが、既存コードを移行する場合は公式の移行ガイドを確認するのが安全です。

また、NumPyは Python 3.14 などの新しいPythonにも順次対応を進めており、GIL(グローバルインタプリタロック)を無効化できるfree-threading版への対応も継続的に強化されています。バージョンによって対応状況や仕様が変わるため、最新の正確な情報は公式サイト(numpy.org)で確認することをおすすめします。

よくある質問(FAQ)

NumPyの読み方は?

一般に「ナンパイ」と読まれます。「ナムパイ」と表記されることもあります。Numerical Python(数値計算用のPython)を縮めた名前です。

NumPyとPandasの違いは?

NumPyは数値の多次元配列(ndarray)を高速に計算することに特化したライブラリです。PandasはそのNumPyを土台に、表形式(行と列)のデータを扱いやすくしたもので、CSVの読み込みやラベル付き集計などが得意です。数値計算の基盤がNumPy、表データの操作がPandasと考えるとよいでしょう。

NumPyが速いのはなぜ?

中核がC言語などで実装されていること、データを連続メモリにまとめて持つこと、ループを使わず配列全体に一括で演算するベクトル化、の3点が主な理由です。

インストール済みか・バージョンを確認するには?

Pythonで import numpy as np の後に print(np.__version__) を実行します。バージョン番号が表示されれば導入済みです。

NumPyは何に使われる?

科学技術計算、データ分析、機械学習・ディープラーニングの前処理、画像処理、信号処理、金融データの解析など、数値をまとめて扱うあらゆる場面で使われます。Pythonでデータを扱う多くのライブラリの基盤にもなっています。

インストールでエラーが出たときは?

まずpip自体を最新にする(pip install --upgrade pip)と解決することが多いです。それでも失敗する場合は、Pythonのバージョンが古すぎないか、仮想環境が正しく有効になっているかを確認してください。エラーメッセージで検索すると同じ事例が見つかることも多いです。

NumPyの最新バージョンは?

2026年時点では2.4系が最新です(2024年6月にメジャーアップデートのNumPy 2.0が公開されました)。バージョンは頻繁に更新されるため、最新の正確な情報は公式サイトで確認してください。

関連記事

資料請求

RELATED POSTS 関連記事