一覧へ

NumPy — 配列演算の力

numpyのndarrayとは何か、なぜリストよりも高速なのか、どのように使うのかを理解します。

入門
|
7
|
検証済み (2026-07)
進捗0/17 (0%)

NumPy — 配列演算の力

このトピックを終えると

numpyのndarrayとは何かを説明でき、リストとの違いと基本的な演算を行えるようになります。


numpyとは

numpy(ナムパイ)はPythonで大量の数値データを高速に処理するライブラリです。

python
import numpy as np
# リスト → ndarray
arr = np.array([1, 2, 3, 4, 5])
print(arr) # [1 2 3 4 5]
print(type(arr)) # <class 'numpy.ndarray'>

npはnumpyの慣例的な略称です。


なぜリストではなくnumpyなのか

速度の違い

python
import numpy as np
# 100万個の要素それぞれに2を掛ける
# 純粋なPythonリスト
py_list = list(range(1_000_000))
result = [x * 2 for x in py_list] # 遅い
# numpy
np_arr = np.arange(1_000_000)
result = np_arr * 2 # 速い(10〜100倍)

numpyは内部的にCで書かれており、連続したメモリに同じ型のデータを格納します。Pythonリストは各要素が独立したPythonオブジェクトですが、ndarrayはメモリが連続しているためCPUキャッシュに有利です。

ベクトル演算

python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 要素ごとの演算 — ループなしで
print(a + b) # [5 7 9]
print(a * b) # [4 10 18]
print(a ** 2) # [1 4 9]
print(a > 2) # [False False True]

リストでこれをやるにはfor文を回す必要があります。numpyなら1行で終わります。


配列の作成

python
import numpy as np
# 直接作成
a = np.array([1, 2, 3])
# 0で埋めた配列
zeros = np.zeros(5) # [0. 0. 0. 0. 0.]
# 1で埋めた配列
ones = np.ones(3) # [1. 1. 1.]
# 連続する数値
seq = np.arange(0, 10, 2) # [0 2 4 6 8]
# 均等間隔
lin = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]

多次元配列

python
import numpy as np
# 2次元配列(行列)
matrix = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(matrix.shape) # (2, 3) — 2行3列
print(matrix[0, 1]) # 2 — 0行目、1列目
print(matrix[:, 0]) # [1 4] — 全行の0列目
# 3次元も可能
cube = np.zeros((2, 3, 4))
print(cube.shape) # (2, 3, 4)

shapeは配列のサイズをタプルで返します。データ分析、画像処理、機械学習でshapeを頻繁に確認します。


よく使う演算

python
import numpy as np
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
print(arr.sum()) # 31
print(arr.mean()) # 3.875
print(arr.std()) # 2.588...
print(arr.min()) # 1
print(arr.max()) # 9
print(arr.argmax()) # 5(最大値のインデックス)
# ソート
print(np.sort(arr)) # [1 1 2 3 4 5 6 9]
# 条件フィルタ
print(arr[arr > 3]) # [4 5 9 6]
# reshape — 形状変換
reshaped = arr.reshape(2, 4)
print(reshaped)
# [[3 1 4 1]
# [5 9 2 6]]

ブロードキャスティング

サイズが異なる配列同士でも演算が可能です。

python
import numpy as np
matrix = np.array([
[1, 2, 3],
[4, 5, 6]
])
# 各行に[10, 20, 30]を足す
row = np.array([10, 20, 30])
print(matrix + row)
# [[11 22 33]
# [14 25 36]]

numpyが自動的にrowを2行に拡張して演算します。これを**ブロードキャスティング(broadcasting)**といいます。明示的にループを書く必要がありません。


💬 質問・コメント

0件のコメント

ログインせずに投稿できます。ゲスト投稿は投稿者自身で編集・削除できません。

0/2000

読み込み中...