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

ブロードキャスティング

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

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)
Note
注意

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

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

次元数の違い

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

1次元配列から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)

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

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

スカラーを2次元配列にブロードキャストする
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)

非互換な形状

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

非互換な形状

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

右端の次元から比較すると: 323 \neq 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)
question mark

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

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

すべて明確でしたか?

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

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

セクション 4.  1

AIに質問する

expand

AIに質問する

ChatGPT

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

セクション 4.  1
some-alt