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

Pythonのnumpy.einsum()でアインシュタイン縮約記法によるスカラー乗法を実行する方法

Pythonでアインシュタイン縮約記法(Einstein summation convention)に基づくスカラー乗法を実行するには、NumPyライブラリのnumpy.einsum()メソッドを使用します。

第1引数の「subscript(添字)」には、総和の対象となる添字ラベルをカンマ区切りのリスト形式で指定します。第2引数の「operands(オペランド)」には、演算の対象となる配列を渡します。

einsum()メソッドは、オペランドに対してアインシュタイン縮約記法を評価します。この記法を活用すると、多次元配列を扱う線形代数の一般的な演算の多くを、非常にシンプルな形で表現できます。暗黙モードではeinsumが自動的に計算を行い、明示モードでは特定の添字ラベルへの総和を無効化または強制できるため、古典的なアインシュタイン縮約演算にとらわれない、より柔軟な配列操作も実現可能です。

手順

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

import numpy as np

numpy.arange()とreshape()を使って配列を作成します。

arr = np.arange(6).reshape(2,3)

スカラー値を定義します。ここでは「val = 2」とします。

val = 2

作成した配列を表示して確認しましょう。

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)

アインシュタイン縮約記法によるスカラー乗法を実行するには、numpy.einsum()メソッドを使用します。添字に「'..., ...'」を指定することで、各要素同士の積が計算されます。

print("\nResult (scalar multiplication)...\n",np.einsum('..., ...', val, arr))

サンプルコード

import numpy as np

# numpy.arange()とreshape()で配列を作成
arr = np.arange(6).reshape(2,3)

# スカラー値を定義
val = 2

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

# データ型を確認
print("\nDatatype of Array...\n",arr.dtype)

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

# 形状を確認
print("\nShape of Array...\n",arr.shape)

# アインシュタイン縮約記法によるスカラー乗法を実行
print("\nResult (scalar multiplication)...\n",np.einsum('..., ...', val, arr))

出力結果

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

Datatype of Array...
int64

Dimensions of Array...
2

Shape of Array...
(2, 3)

Result (scalar multiplication)...
[[ 0  2  4]
 [ 6  8 10]]

このように、np.einsum('..., ...', val, arr)と記述するだけで、スカラー値と配列の各要素との乗算が簡単に実行できました。結果として、元の配列の全要素が2倍された新しい配列が出力されています。

  1. Python NumPyで日時(datetime)配列をUTCタイムゾーン付きの文字列配列に変換する方法

    PythonのNumPyで日時(datetime)の配列を文字列の配列に変換するには、numpy.datetime_as_string() メソッドを使用します。このメソッドは、入力配列と同じ形状の文字列配列を返します。 第1引数にはフォーマット対象となるUTCタイムスタンプの配列を指定します。第2引数は「timezone」で、日時を表示する際に使用するタイムゾーン情報です。UTC を指定すると、UTC時間であることを示すために末尾に「Z」が付加されます。 変換の手順 まず、必要なライブラリをインポートします。 import numpy as np 次に、日時の配列を作成します。dtype の

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

    通常、配列同士の算術演算は、両者のサイズが完全に一致しているか、互換性のある特定のサイズである場合にのみ実行できます。しかしNumPyには、サイズの異なる配列同士でも演算を可能にする「ブロードキャスト(broadcasting)」という強力な仕組みが備わっています。 ブロードキャストでは、次元数(ndim)が小さい方の配列の形状の先頭に「1」を追加して拡張することで、演算対象となる配列同士の形状を揃えます。つまり、ブロードキャストとは、配列の形状を演算に必要な形状へ自動的に変換する機能のことです。 配列ブロードキャストのルール 他方の配列より次元数(ndim)が小さい配列は、その形状の先頭に