NumPyのeinsum関数の概要
Pythonの科学計算ライブラリであるNumPyは、多くの便利な機能を提供しています。その中でも特に強力な機能の一つがeinsum
です。この関数は、アインシュタインの縮約記法に基づいており、複雑な配列の操作を簡潔に記述することができます。この記事では、einsum
の使い方を詳しく解説し、具体的な例を通じてその利便性を実感していただきます。
einsumの基本的な使い方
einsum
は、文字列で指定された演算を配列に対して実行します。まずは基本的な使用法を見てみましょう。例えば、行列の積を計算する場合です。
import numpy as np # 行列の定義 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) # einsumを使用して行列の積を計算 result = np.einsum('ij,jk->ik', A, B) print(result)
このコードでは、'ij,jk->ik'
という文字列が使用されています。これは、行列A
の行とB
の列を掛け合わせ、結果を新しい行列に格納することを意味します。出力は以下のようになります。
[[19 22] [43 50]]
einsumでの要素ごとの和の計算
次に、配列の要素ごとの和を計算する例を見てみましょう。einsum
は、単純な演算にも応用できます。
# 配列の定義 C = np.array([1, 2, 3, 4]) # einsumを使用して要素の和を計算 sum_result = np.einsum('i->', C) print(sum_result)
ここで使用されている'i->'
は、配列C
のすべての要素を合計することを指示しています。出力は次の通りです。
10
einsumでのテンソル縮約
より複雑な例として、テンソルの縮約を考えます。これは高次元配列の操作において非常に有用です。
# 3次元テンソルの定義 D = np.random.rand(2, 3, 4) E = np.random.rand(4, 5) # einsumを使用してテンソル縮約を実行 tensor_result = np.einsum('ijk,kl->ijl', D, E) print(tensor_result.shape)
この例では、テンソルD
と行列E
を縮約して、新しいテンソルを生成しています。出力はテンソルの形状を示し、(2, 3, 5)
となります。
まとめ
NumPyのeinsum
関数は、複雑な配列操作を簡潔に表現するための強力なツールです。この記事では、基本的な行列積からテンソル縮約まで、einsum
のさまざまな使い方を紹介しました。これらの例を通して、einsum
の柔軟性と効率性を理解していただけたでしょうか。ぜひ、実際のプロジェクトでeinsum
を活用してみてください。
NumPyのeinsumは、多次元配列の演算を効率的に行うための機能です。einsumは、Einsteinの縮約記法に基づいており、複数の配列を入力として受け取り、指定された演算を行った結果の新しい配列を返します。
einsumの基本的な使い方は、文字列形式で演算を指定することです。例えば、’ij,jk->ik’という文字列は、2つの行列を入力として受け取り、行列の積を計算して新しい行列を返すことを意味します。
einsumを使うことで、行列の積や転置行列などの演算を簡潔に記述することができます。また、einsumは高速な計算を行うための最適化が施されており、大規模な配列に対しても効率的に演算を行うことができます。
Python 3におけるNumPyのeinsumを理解することで、多次元配列の操作を効率的に行うための強力なツールを手に入れることができます。