NumPy 基礎(ndarray・ブロードキャスト)

数値計算の土台NumPy。ndarray・ベクトル化・ブロードキャスト・axisを完全マスター。

数値計算の土台、NumPy。ndarrayとブロードキャストを理解すれば一気に楽になります。

白峰 リリ(普段) 白峰 リリ

NumPyって何ができるの?

神楽 モニカ 先生(笑顔) 神楽 モニカ 先生

高速な数値配列計算ライブラリね。 リストより数十〜百倍速くて、機械学習の前処理から計算まで広く使うのよ。

紅林 かえで(普段) 紅林 かえで

中心はndarray(N次元配列)ですね。 1次元はベクトル、2次元は行列、3次元以上はテンソルになります。

import numpy as np

# 基本作成
a = np.array([1, 2, 3, 4, 5])     # 1次元配列
b = np.array([[1, 2], [3, 4]])     # 2次元配列
z = np.zeros((3, 4))               # 3x4のゼロ行列
i = np.eye(3)                       # 3x3の単位行列
r = np.random.randn(100)            # 標準正規分布から100サンプル

# 形状確認
print(a.shape)    # (5,)
print(b.shape)    # (2, 2)
print(b.dtype)    # int64
print(b.ndim)     # 2 (次元数)

# 演算 (ベクトル化)
doubled = a * 2                     # [2, 4, 6, 8, 10]
added = a + np.array([10,10,10,10,10])  # [11,12,13,14,15]
squared = a ** 2                    # [1, 4, 9, 16, 25]

# 統計関数
mean = a.mean()         # 3.0
std = a.std()           # 標準偏差
max_val = a.max()       # 5
argmax = a.argmax()     # 4 (最大値のインデックス)
藍沢 しずく(普段) 藍沢 しずく

ベクトル化って?

紅林 かえで(普段) 紅林 かえで

forループを書かずに、配列全体に演算を一括適用することです。 これがNumPyが速い理由ですよ。

白峰 リリ(普段) 白峰 リリ

ブロードキャストって何のこと?

# ブロードキャスト: 形状の違う配列同士を自動で揃える
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])
row = np.array([10, 20, 30])     # shape: (3,)
result = matrix + row             # 各行に row が足される
# [[11, 22, 33],
#  [14, 25, 36],
#  [17, 28, 39]]

# 各列の標準化 (z変換)
X = np.random.randn(100, 5)
X_std = (X - X.mean(axis=0)) / X.std(axis=0)
神楽 モニカ 先生(普段) 神楽 モニカ 先生

ブロードキャストは次元が違う配列同士を、自動で次元を揃えて計算してくれる仕組みなのよ。 これでループを書かずに、行列と行ベクトルを足せるの。

紅林 かえで(普段) 紅林 かえで

axis=0は『行方向(列ごと)』、axis=1は『列方向(行ごと)』という指定です。 つまりX.mean(axis=0)は各列の平均ということですね。

藍沢 しずく(しょんぼり) 藍沢 しずく

axis、覚えにくいよぉ…

神楽 モニカ 先生(普段) 神楽 モニカ 先生

『axis=その軸を潰す方向』と覚える。 axis=0 を潰すと行が消えて列ごとの結果が残る、 axis=1 を潰すと列が消えて行ごとの結果が残る。

紅林 かえで(普段) 紅林 かえで

DS検定★では『ndarray の形状』『ブロードキャスト』『axis の意味』『argmax/mean等の集計関数』が頻出よ。

確認クイズ

(3,4) の行列 X に対し X.mean(axis=0) の結果のshapeは何か。

  1. (3,)
  2. (4,)
  3. (3,4)
  4. スカラー
こたえを見る

正解: 2. (4,)

(4,)。 axis=0 で行方向を潰すので、列ごとの平均が得られて長さ4のベクトルになります。 (列が4つあるため)。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。