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

Pythonでアインシュタインの縮約記法を使ってベクトルの外積を計算する方法

Pythonでアインシュタインの縮約記法(Einstein summation convention)を用いてベクトルの外積を計算するには、NumPyのnumpy.einsum()メソッドを使用します。

第1引数は「添字(subscript)」です。総和を取る対象の添字ラベルを、カンマ区切りの文字列として指定します。第2引数以降は「オペランド」であり、演算の対象となる配列を渡します。

einsum()メソッドは、オペランドに対してアインシュタインの縮約記法を評価します。この記法を活用すると、内積・外積・転置など、多次元配列に関する線形代数の一般的な操作を非常に簡潔に表現できます。

暗黙モードと明示モード

暗黙モードでは、einsum()が指定された添字に従って自動的に値を計算します。一方、明示モードでは「->」を使って出力の添字を明示でき、特定の添字ラベルへの総和を無効化または強制できます。これにより、古典的なアインシュタイン縮約操作とはみなされないような、より柔軟な配列演算も実現可能です。

手順

まず、必要なライブラリをインポートします。

import numpy as np

arange()メソッドを使ってNumPy配列を作成します。

arr = np.arange(5)

作成した配列を表示します。

print("Our Array...\n",arr)

配列の次元数を確認します。

print("\nDimensions of our Array...\n",arr.ndim)

配列のデータ型を取得します。

print("\nDatatype of our Array object...\n",arr.dtype)

配列の形状を取得します。

print("\nShape of our Array object...\n",arr.shape)

アインシュタインの縮約記法でベクトルの外積を計算します。ここでは添字として「i,j」を指定し、2つのベクトルのすべての要素同士の組み合わせ(外積)を求めます。

print("\nResult (outer product)...\n",np.einsum('i,j', np.arange(2)+1, arr))

サンプルコード

import numpy as np

# arange()メソッドでNumPy配列を作成
arr = np.arange(5)

# 配列を表示
print("Our Array...\n",arr)

# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)

# データ型を取得
print("\nDatatype of our Array object...\n",arr.dtype)

# 形状を取得
print("\nShape of our Array object...\n",arr.shape)

# アインシュタインの縮約記法でベクトルの外積を計算
print("\nResult (outer product)...\n",np.einsum('i,j', np.arange(2)+1, arr))

出力結果

Our Array...
[0 1 2 3 4]

Dimensions of our Array...
1

Datatype of our Array object...
int64

Shape of our Array object...
(5,)

Result (outer product)...
[[0 1 2 3 4]
 [0 2 4 6 8]]

このように、np.einsum('i,j', ...)と記述するだけで、2つのベクトルの外積(直積)を簡潔に計算できます。結果として得られる行列の各要素は、1つ目のベクトルの各行成分と2つ目のベクトルの各列成分の積になっています。

  1. 【Python NumPy】np.char.count()で部分文字列の重複しない出現回数を配列として返す方法

    PythonのNumPyでは、numpy.char.count()メソッドを使用することで、文字列配列の各要素に含まれる部分文字列の「重複しない出現回数」をカウントし、その結果を配列として返すことができます。第1引数には、検索対象となる部分文字列(sub)を指定します。なお、numpy.charモジュールは、numpy.str_型の配列に対してベクトル化された文字列操作を提供しており、ループ処理を書かずに効率的に文字列操作を行えるのが特徴です。実行手順1. 必要なライブラリをインポートするまず、必要なライブラリをインポートします。import numpy as np2. 1次元の文字列配列を作

  2. Pythonで配列内に積がkとなる部分配列が存在するかどうかを判定する方法

    問題の概要正の数と負の数が混在する配列 nums と、もうひとつの値 k が与えられます。このとき、要素の積がちょうど k になる部分配列(連続する要素からなる配列)が nums の中に存在するかどうかを判定します。たとえば、nums = [-2, -1, 1, 3, 5, 8]、k = 6 という入力の場合、部分配列 [-2, -1, 3] の積は (-2) × (-1) × 3 = 6 となるため、出力は True になります。アルゴリズムの考え方この問題は、「最大積部分配列」を求める際によく使われるテクニックと同じ発想で解くことができます。ポイントは、負の数を掛けると積の符号が反転し、そ