NumPyでのブロードキャスティングをマスターする

この記事では、NumPy(Numerical Python)でのブロードキャスティングについて深く探ります。具体的なコード例とその解説、応用例を含めています。ブロードキャスティングは、NumPy配列の形状が異なる場合でも、形状を揃えずに算術計算を行う強力な機能です。

目次

ブロードキャスティングとは

ブロードキャスティングとは、NumPyで提供される、形状の異なる配列同士での算術計算を可能にするテクニックです。通常、形状の異なる配列に対して算術計算を行うことはできませんが、ブロードキャスティングを使用するとこの制限を解除できます。

基本的なブロードキャスティングのルール

基本的なブロードキャスティングのルールは以下のとおりです。

  • 次元数が少ない方の配列の形状に1を付け足す
  • 各次元でサイズが1または同じであればブロードキャスティングが可能
  • 計算は次元数が多い方から行われる

具体的なコード例

以下は、ブロードキャスティングを用いたNumPyの具体的なコード例です。

import numpy as np

# 1次元配列
a = np.array([1, 2, 3])

# スカラー
b = 2

# ブロードキャスティングを用いた掛け算
result = a * b
print(result)  # 出力: [2 4 6]

この例では、1次元配列`a`とスカラー`b`を掛け算しています。NumPyのブロードキャスティングが自動的にスカラー`b`を配列`a`の形状に合わせ、掛け算を行います。

ブロードキャスティングの内部処理

NumPyでは以下のように内部でブロードキャスティングが行われます。

# 手動でブロードキャスティングを再現
b_expanded = np.array([2, 2, 2])  # スカラーを配列の形状に合わせる
result = a * b_expanded
print(result)  # 出力: [2 4 6]

応用例

応用例1:2次元配列と1次元配列の計算

2次元配列と1次元配列の加算も、ブロードキャスティングを活用することで容易に行えます。

# 2次元配列
matrix = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# 1次元配列
vector = np.array([1, 0, -1])

# ブロードキャスティングを用いた加算
result = matrix + vector
print(result)
# 出力:
# [[ 2  2  2]
#  [ 5  5  5]
#  [ 8  8  8]]

応用例2:配列の正規化

配列の全要素から平均値を引き、標準偏差で割ることで、配列を正規化することができます。

# 配列の平均値と標準偏差を計算
mean_val = np.mean(matrix)
std_val = np.std(matrix)

# ブロードキャスティングを用いて正規化
normalized_matrix = (matrix - mean_val) / std_val
print(normalized_matrix)

まとめ

NumPyでのブロードキャスティングは、形状が異なる配列同士の算術計算を簡単に行える非常に便利な機能です。基本ルールを理解して、具体例を通して手を動かすことで、この強力な機能をマスターしましょう。

コメント

コメントする

目次