配列演算(ベクトル化計算)

NumPy入門④ 配列演算(ベクトル化計算)

ベクトル化計算とは?

NumPyの大きな特徴のひとつは「ベクトル化計算」です。
これは ループを使わずに配列全体に演算を適用できる仕組み で、Pythonの標準リストよりもはるかに高速に処理できます。

基本的な四則演算

NumPy配列では、要素ごとに自動的に計算が行われます。

import numpy as np

a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])

print(a + b)   # [11 22 33 44]
print(a - b)   # [ -9 -18 -27 -36]
print(a * b)   # [ 10  40  90 160]
print(b / a)   # [10. 10. 10. 10.]

リスト同士ではできない「要素ごとの演算」が可能です。

スカラー演算

配列全体に対して、1つの数値を一括で演算できます。

print(a + 5)   # [ 6  7  8  9]
print(a * 2)   # [ 2  4  6  8]

要素ごとの累乗や平方根

数学関数も配列全体に適用されます。

print(a ** 2)        # [ 1  4  9 16] (二乗)
print(np.sqrt(a))    # [1.         1.41421356 1.73205081 2.       ] (平方根)

行列演算(ドット積・内積)

二次元配列では行列演算も可能です。

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# ドット積(行列積)
print(np.dot(A, B))
# [[19 22]
#  [43 50]]

# Python 3.5以降は @ 演算子でも可
print(A @ B)

集約演算

要素の合計や平均などを計算できます。

c = np.array([1, 2, 3, 4, 5])

print(np.sum(c))     # 15
print(np.mean(c))    # 3.0
print(np.max(c))     # 5
print(np.min(c))     # 1

まとめ

  • ベクトル化計算により、ループ不要で高速な演算が可能
  • 配列同士の演算は要素ごとに自動で計算される
  • スカラー値の加算・乗算も配列全体に適用できる
  • 行列演算(ドット積)や集約関数で高度な数値処理が可能