NumPyとは何か
NumPy(ナンパイ)は、Pythonで数値計算を行うためのライブラリです。
多次元配列を効率よく扱う機能を中心に、数学関数、統計処理、線形代数など幅広い演算をサポートしています。データ分析や機械学習の多くのライブラリ(pandas、scikit-learn、TensorFlowなど)が、内部でNumPyの配列を前提として動いています。
Pythonの標準リストでも数値を扱えますが、NumPyの配列(ndarray)はループなしで一括演算ができるため、大量データの処理が速くなります。
Pythonの基礎やデータ分析全般については Pythonとは?初心者向けにわかりやすく解説 にまとめています。pandasとの違いについては後述します。
NumPyのインストールとインポート
インストール方法
NumPyはpipでインストールします。
pip install numpy
Anacondaを使っている場合は標準で含まれているため、インストール不要なことが多いです。
インポートの書き方
慣例として np という別名でインポートします。
import numpy as np
この記法はNumPyを使うほぼすべてのコードで共通しています。np という別名を使うことで、コードが短く書けます。
numpy arrayの基本:1次元配列を作る
NumPyの配列は np.array() で作成します。
Pythonのリストを渡すだけで配列に変換できます。
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print(a)
print(type(a))
[10 20 30 40 50]
<class 'numpy.ndarray'>
ndarray はNumPyの配列型の名前です。Pythonのリストとは異なり、すべての要素が同じデータ型(整数、浮動小数点数など)になります。
配列同士の演算
NumPyの配列は、ループなしで要素ごとの演算ができます。
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
print(a + b)
print(a * 2)
[11 22 33 44 55]
[ 2 4 6 8 10]
Pythonのリストで同じ処理をしようとするとfor文が必要ですが、NumPyでは1行で書けます。
numpy 2次元配列の作り方と操作
2次元配列を作る
リストの中にリストを入れると、2次元配列(行列)を作れます。
import numpy as np
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(matrix)
print(matrix.shape)
[[1 2 3]
[4 5 6]
[7 8 9]]
(3, 3)
shape は配列の形(行数、列数)を表します。(3, 3) は3行3列を意味します。
要素の取り出し方
2次元配列の要素は [行番号, 列番号] で取り出します。番号は0から始まります。
import numpy as np
matrix = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(matrix[0, 0]) # 1行目の1列目
print(matrix[1, 2]) # 2行目の3列目
print(matrix[2, :]) # 3行目をすべて取り出す
print(matrix[:, 1]) # 2列目をすべて取り出す
1
6
[7 8 9]
[2 5 8]
matrix[行, 列] の形で指定します。: はすべての要素を意味します。
2次元配列の形を変える(reshape)
reshape() を使うと、配列の形を変えられます。要素数が変わらない範囲であれば自由に変形できます。
import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b)
print(b.shape)
[[1 2 3]
[4 5 6]]
(2, 3)
よく使う配列の作り方
ゼロや特定の規則で並んだ配列を作る関数があります。
import numpy as np
# ゼロで埋めた配列
zeros = np.zeros((2, 3))
print(zeros)
# 1で埋めた配列
ones = np.ones((3, 3))
print(ones)
# 0から始まる連番
arange = np.arange(0, 10, 2) # 0から10未満を2ステップで
print(arange)
# 0から1の間を等間隔に5分割
linspace = np.linspace(0, 1, 5)
print(linspace)
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[0 2 4 6 8]
[0. 0.25 0.5 0.75 1. ]
np.arange() はPythonの range() に相当します。np.linspace() は区間を均等分割するときに使います。
統計・集計の基本操作
NumPyは配列に対して統計処理を行う関数を持っています。
import numpy as np
data = np.array([4, 7, 2, 9, 1, 5, 8, 3, 6])
print(data.sum()) # 合計
print(data.mean()) # 平均
print(data.max()) # 最大値
print(data.min()) # 最小値
print(data.std()) # 標準偏差
45
5.0
9
1
2.581988897471611
2次元配列では axis を指定することで、行方向・列方向それぞれの集計ができます。
import numpy as np
matrix = np.array([[1, 2, 3],
[4, 5, 6]])
print(matrix.sum(axis=0)) # 列方向の合計(各列の和)
print(matrix.sum(axis=1)) # 行方向の合計(各行の和)
[5 7 9]
[ 6 15]
NumPyとpandasの使い分け
NumPyとpandasはどちらもデータ処理に使いますが、用途が異なります。
| 比較軸 | NumPy | pandas |
|---|---|---|
| 主な用途 | 数値計算・行列演算 | 表形式データの操作・集計 |
| データ構造 | ndarray(同一型の配列) | DataFrame・Series(列ごとに型が違ってよい) |
| 列名・ラベル | なし | あり |
| CSVの読み込み | 苦手 | 得意 |
pandasはNumPyの上に構築されており、DataFrameの内部ではNumPyの配列が使われています。数値を大量に計算するならNumPy、表形式のデータを扱うならpandasを選ぶのが基本です。
pandasの基本的な使い方は Pythonのpandasとは何か【インストールと基本的な使い方を解説】 で解説しています。
よくあるミスと対処法
ModuleNotFoundError: No module named ‘numpy’
NumPyがインストールされていない環境で import numpy を実行するとこのエラーが出ます。
ModuleNotFoundError: No module named 'numpy'
対処は pip install numpy を実行するだけです。仮想環境を使っている場合は、その環境が有効になっているかを確認してください。
形が合わない(ValueError: operands could not be broadcast)
形が違う配列同士を演算しようとするとエラーになります。
import numpy as np
a = np.array([1, 2, 3])
b = np.array([1, 2])
print(a + b) # エラー
ValueError: operands could not be broadcast together with shapes (3,) (2,)
NumPyにはブロードキャストというルールがあり、特定の条件を満たす場合は形が違っても演算できますが、基本は形を揃えることを意識してください。shape で確認する習慣をつけると原因を見つけやすくなります。
インデックスが範囲外(IndexError: index N is out of bounds)
配列の要素数を超えたインデックスを指定するとエラーになります。
import numpy as np
a = np.array([10, 20, 30])
print(a[3]) # 要素は0,1,2の3つなので3はエラー
IndexError: index 3 is out of bounds for axis 0 with size 3
NumPyのインデックスは0始まりです。3要素なら a[0]〜a[2] が正しい範囲です。
AI時代におけるNumPyの位置づけ
AIがコードを生成してくれる場面でも、NumPyの配列構造を理解していると出力の意図を確認しやすくなります。機械学習モデルへのデータ入力は多くの場合NumPyの配列を前提としており、shapeや型のズレに気づくには基礎の理解が欠かせません。
まとめ
この記事では、NumPyの基本的な使い方を解説しました。
import numpy as npでインポートするnp.array()でndarrayを作成する- 2次元配列は
shapeで形を確認し、[行, 列]で要素を取り出す reshape()で配列の形を変えられるsum()mean()などで統計処理ができる- pandasとは用途が異なり、数値計算・行列演算はNumPyが担う
NumPyは数値計算の土台として位置づけ、pandasや機械学習ライブラリと組み合わせて使うのが基本的な流れです。
Pythonでどこまで学ぶべきか迷っている場合は、AIが普及した時代にプログラミングスクールは必要か? も参考にしてください。