Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ブロードキャスティング | NumPyによる数学
NumPy基礎

bookブロードキャスティング

メニューを表示するにはスワイプしてください

NumPyで数学的な操作を行う前に、重要な概念であるブロードキャスティングを理解することが大切です。

Note
定義

ブロードキャスティングは、配列の形状を手動で変更することなく、算術演算を行うために配列の形状を揃える方法です。基本的に、ブロードキャスティングは配列の形状を自動的に調整します。

NumPyが2つの配列を扱う際、それらが一緒にブロードキャストできるかどうかを判断するために、配列の形状の互換性を確認します。

Note
注意

2つの配列がすでに同じ形状である場合、ブロードキャストは不要。

同じ次元数

加算を行いたい2つの配列があり、それぞれの形状が (2, 3)(1, 3) であるとする。NumPyは2つの配列の形状を右端の次元から左方向に比較する。つまり、最初に33を比較し、次に21を比較する。

2つの次元は、等しい場合、またはどちらか一方が1の場合に互換性があるとみなされる。

  • 3と3の次元は、等しいため互換性あり。
  • 2と1の次元は、どちらかが1のため互換性あり。

すべての次元が互換性を持つため、形状は互換性ありと判断される。したがって、配列はブロードキャスト可能となり、同じ形状の行列間での標準的な加算演算(要素ごとの演算)が実行される。

123456789
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 2D array with 1 row array_2 = np.array([[11, 12, 13]]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
copy
Note
注意

array_2 は、1 行のみを含む 2 次元 配列として作成されているため、その形状は (1, 3) となる。

しかし、これを形状 (3,)1 次元 配列として作成した場合はどうなるか?

次元数の違い

一方の配列の次元数が他方より少ない場合、足りない次元1 のサイズとして扱われる。例えば、形状が (2, 3)(3,) の 2 つの配列を考える。この場合、3 = 3 であり、左側の足りない次元は 1 と見なされるため、形状 (3,)(1, 3) となる。形状 (2, 3)(1, 3) は互換性があるため、これら 2 つの配列はブロードキャスト可能となる。

123456789
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) # Creating a 1D array array_2 = np.array([11, 12, 13]) print(array_2.shape) # Broadcasting and element-wise addition result = array_1 + array_2 print(result)
copy

スカラーのブロードキャスト

配列同士の数学演算に加えて、スカラー(数値)と配列の間でも、ブロードキャストによって同様の演算が可能。スカラーは本質的に形状を持たず、すべての次元が1と見なされるため、配列の形状が任意でも常に互換性がある。

123456
import numpy as np array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # Broadcasting and element-wise addition result = array + 10 print(result)
copy

非互換な形状

非互換な形状の例も考えてみます。この場合、ブロードキャストが不可能なため、算術演算を実行できません:

2x3 配列と長さが 2 の 1 次元配列、すなわち形状が (2,) の配列があります。欠落している次元は 1 と見なされるため、形状は (2, 3)(1, 2) になります。

左から右へ見ていくと、3 != 2 となり、すぐに非互換な次元、したがって非互換な形状となります。この状態でコードを実行しようとすると、エラーが発生します:

12345678
import numpy as np array_1 = np.array([[1, 2, 3], [4, 5, 6]]) print(array_1.shape) array_2 = np.array([11, 12]) print(array_2.shape) # ValueError result = array_1 + array_2 print(result)
copy
question mark

互換性のある形状を持つすべての配列を選択してください:

すべての正しい答えを選択

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  1

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  1
some-alt