Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】NumPyのブロードキャストとは?配列演算のルールと具体例をわかりやすく解説

通常、配列同士の算術演算は、両者のサイズが完全に一致しているか、互換性のある特定のサイズである場合にのみ実行できます。しかしNumPyには、サイズの異なる配列同士でも演算を可能にする「ブロードキャスト(broadcasting)」という強力な仕組みが備わっています。

ブロードキャストでは、次元数(ndim)が小さい方の配列の形状の先頭に「1」を追加して拡張することで、演算対象となる配列同士の形状を揃えます。つまり、ブロードキャストとは、配列の形状を演算に必要な形状へ自動的に変換する機能のことです。

配列ブロードキャストのルール

  • 他方の配列より次元数(ndim)が小さい配列は、その形状の先頭に「1」が追加されます。

  • 出力形状の各次元のサイズは、入力側の配列におけるその次元のサイズの最大値となります。

  • 入力配列は、特定の次元におけるサイズが出力サイズと一致するか、その値がちょうど1である場合に、計算に使用できます。

  • 入力配列のある次元のサイズが1である場合、その次元に沿ったすべての計算には、その次元の先頭のデータ要素が使用されます。

コード例

以下の例は、NumPy配列を使った演算において、どのようにブロードキャストが行われるのかを示したものです。

import numpy as np
a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]])
b = np.array([1.0,2.0,3.0])

print('First array:')
print(a)
print('\n')

print('Second array:')
print(b)
print('\n')

print('First Array + Second Array')
print(a + b)

実行結果

上記のコードを実行すると、次のような結果が得られます。

First array:
[[ 0.  0.  0.]
 [10. 10. 10.]
 [20. 20. 20.]
 [30. 30. 30.]]

Second array:
[1. 2. 3.]

First Array + Second Array
[[ 1.  2.  3.]
 [11. 12. 13.]
 [21. 22. 23.]
 [31. 32. 33.]]

ブロードキャストの仕組み解説

この例では、配列aの形状は(4, 3)、配列bの形状は(3,)です。ブロードキャストのルールに従い、bの形状はまず(1, 3)として扱われ、その後aの行数に合わせて(4, 3)へと拡張されます。これにより、bの各行が[1.0, 2.0, 3.0]として複製され、aの各行に要素ごとに加算されます。そのため、明示的なループやコピー処理を書くことなく、効率的に演算を行うことができるのです。

  1. Pythonのarrayモジュール徹底解説:数値データを効率的に扱う配列の基本と活用術

    配列(Array)は、C/C++やJavaなどの言語で広く使われている基本的なデータ構造です。これらの言語では、配列は「同じデータ型の要素を複数まとめたもの」として定義されます。一方Pythonには、組み込みの配列型は存在しません。リスト(List)やタプル(Tuple)も要素のコレクションですが、異なる型の要素を混在させることができます。 そこで登場するのがPython標準ライブラリのarrayモジュールです。このモジュールはC言語風の配列をエミュレートし、同種のデータをコンパクトかつ効率的に格納できます。モジュールではarrayクラスが定義されており、以下のコンストラクタで配列オブジェクト

  2. Bash配列の使い方を徹底解説!作成・ループ・追加・削除の実例付きガイド

    配列(Array)とは、複数の要素をまとめて管理できるデータ構造です。Bashでは、文字列や数値など、異なる型の要素を1つの配列に混在させて格納することも可能です。 本記事では、Bashにおける配列の作成方法と基本的な使い方を解説します。さらに、ループ処理、要素の出力、配列サイズの取得、内容の変更といった配列操作についても、具体例を交えながら詳しく見ていきましょう。 Bashで配列を作成する方法 Bashで配列を作成するには、主に2つの方法があります。 declareキーワードを使う方法 declare -a my_bash_array このコマンドを実行すると、「my_bash_array