NumPy入門⑧ 配列の形状変換と操作
配列の形状(shape)とは?
NumPy配列は「shape(形状)」という属性を持ち、行数や列数を表します。
形状を理解することは、多次元配列を自在に操作するための基礎となります。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape) # (2, 3) → 2行3列
print(a.ndim) # 2 → 次元数
reshapeで形を変える
配列の要素数を変えずに形状を変更するには reshape を使います。
arr = np.arange(12) # [0 1 2 ... 11]
reshaped = arr.reshape(3, 4)
print(reshaped)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
要素数が合わない形状に変換しようとするとエラーになります。
-1を使った自動計算
reshape に -1 を指定すると、その次元のサイズを自動計算してくれます。
arr = np.arange(12)
print(arr.reshape(2, -1)) # (2, 6) に変換
print(arr.reshape(-1, 3)) # (4, 3) に変換
transposeで転置する
行と列を入れ替える操作は transpose または .T を利用します。
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b.T)
# [[1 4]
# [2 5]
# [3 6]]
print(np.transpose(b)) # 同じ結果
axisを指定した操作
NumPyの多くの関数は axis を指定して計算範囲を制御できます。
「どの次元に対して処理を行うか」を決めるために利用されます。
c = np.array([[1, 2, 3],
[4, 5, 6]])
print(np.sum(c, axis=0)) # 列ごとの合計 → [5 7 9]
print(np.sum(c, axis=1)) # 行ごとの合計 → [ 6 15]
axis=0→ 縦方向(列単位の処理)axis=1→ 横方向(行単位の処理)
次元の追加と削除
配列の次元を操作する関数もよく使われます。
arr = np.array([1, 2, 3, 4])
# 次元を追加(1行4列 → 2次元化)
print(arr[np.newaxis, :]) # [[1 2 3 4]]
# 次元を追加(4行1列)
print(arr[:, np.newaxis])
# [[1]
# [2]
# [3]
# [4]]
不要な次元を削除する場合は squeeze を使います。
d = np.array([[[1, 2, 3]]])
print(d.shape) # (1, 1, 3)
print(np.squeeze(d)) # [1 2 3] (余分な次元を削除)
まとめ
reshapeで形状を自由に変換できる(-1で自動計算も可能)transposeや.Tで転置が可能axisを指定すると行ごと・列ごとの演算ができるnewaxisで次元を追加、squeezeで不要な次元を削除できる