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

Pythonで特定の軸に沿って異なる次元の配列同士のテンソル内積を計算する方法

2つのテンソル a と b、そして2つの配列様オブジェクト(a_axes, b_axes)を含む配列様オブジェクトが与えられたとき、a_axes および b_axes で指定された軸に沿って、a と b の要素(成分)の積を合計します。第3引数には単一の非負の整数値スカラー N を指定することもでき、その場合は a の後ろ N 個の次元と b の先頭 N 個の次元が順に縮約されます。

Pythonで次元の異なる配列同士のテンソル内積(テンソルドット積)を計算するには、numpy.tensordot() メソッドを使用します。パラメータ a と b は「ドット」演算の対象となるテンソルです。

axes パラメータが整数 N の場合、a の後ろから N 個の軸と、b の先頭から N 個の軸を順に縮約します。対応する軸のサイズは一致している必要があります。

手順

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

import numpy as np

array() メソッドを使って、異なる次元を持つ2つのNumPy配列を作成します。

arr1 = np.array(range(1, 9))
arr1.shape = (2, 2, 2)

arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
arr2.shape = (2, 2)

配列を表示して確認します。

print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

両配列の次元数(ndim)を確認します。

print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

両配列の形状(shape)を確認します。

print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

次元の異なる配列同士のテンソル内積を計算するには、numpy.tensordot() メソッドを使用します。ここでは axes=1 を指定しているため、arr1 の最後の軸(サイズ2)と arr2 の最初の軸(サイズ2)が縮約されます。

print("\nTensor dot product...\n", np.tensordot(arr1, arr2, axes = 1))

サンプルコード

import numpy as np

# array() メソッドを使って、異なる次元を持つ2つのNumPy配列を作成
arr1 = np.array(range(1, 9))
arr1.shape = (2, 2, 2)
arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
arr2.shape = (2, 2)

# 配列を表示
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)

# 両配列の次元数を確認
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)

# 両配列の形状を確認
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)

# 次元の異なる配列同士のテンソル内積を numpy.tensordot() メソッドで計算
# パラメータ a と b は「ドット」演算の対象となるテンソル
print("\nTensor dot product...\n", np.tensordot(arr1, arr2, axes = 1))

実行結果

Array1...
[[[1 2]
[3 4]]

[[5 6]
[7 8]]]

Array2...
[['p' 'q']
['r' 's']]

Dimensions of Array1...
3

Dimensions of Array2...
2

Shape of Array1...
(2, 2, 2)

Shape of Array2...
(2, 2)

Tensor dot product...
[[['prr' 'qss']
['ppprrrr' 'qqqssss']]

[['ppppprrrrrr' 'qqqqqssssss']
['ppppppprrrrrrrr' 'qqqqqqqssssssss']]]

  1. Python(NumPy)で4次元配列と3次元配列のクロネッカー積を計算する方法

    クロネッカー積(Kronecker Product)とは PythonのNumPyでは、numpy.kron()メソッドを使うことで、4次元配列と3次元配列のように次元数が異なる配列同士でもクロネッカー積を簡単に求めることができます。クロネッカー積とは、第1の配列の各要素によって第2の配列全体をスケーリングしたブロックから構成される複合配列のことです。 kron()関数は、引数aとbの次元数が同じであることを前提としており、次元数が異なる場合は、小さい方の配列の先頭にサイズ1の軸が自動的に追加されます。a.shape = (r0, r1, …, rN)、b.shape = (s0, s1, …

  2. Python Matplotlibで軸上にベクトル場をプロットする方法

    Matplotlibを使って、図の軸上にベクトル場(矢印場)をプロットするには、quiver() メソッドを使用します。本記事では、渦状のベクトル場を描画する具体的な手順とサンプルコードを紹介します。 ベクトル場プロットの手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 NumPy を使って X、Y、T、R、U、V の各データポイントを作成します。 現在の図に Axes(座標軸)を追加し、それをカレントの軸として設定します。 quiver() メソッドで3次元の矢印場をプロットします。 show() メソッドで図を表示します。 サンプルコード imp