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

PythonのNumPyでテンソル内積を計算する方法

Pythonでテンソル同士の内積(テンソルドット積)を計算するには、NumPyのnumpy.tensordot()メソッドを使用します。このメソッドは、2つのテンソルaとb、および軸を指定する配列様オブジェクト(a_axes, b_axes)を受け取り、指定された軸に沿ってaとbの要素(成分)の積を合計します。

第3引数には単一の非負整数スカラーNを指定することもできます。その場合、aの後ろN個の次元とbの先頭N個の次元が縮約されます。axesパラメータにint型のNを渡すと、aの最後のN軸とbの最初のN軸が順に合計されます。対応する軸のサイズは一致している必要があります。

テンソル内積の計算手順

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

import numpy as np

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

arr1 = np.arange(60.).reshape(3,4,5)
arr2 = np.arange(24.).reshape(4,3,2)

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

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

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

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()メソッドを使用します。引数aとbは「ドット」演算を行う対象のテンソルです。ここでは、axesパラメータに([1,0],[0,1])を指定して、arr1の1番目と0番目の軸と、arr2の0番目と1番目の軸をそれぞれ対応させて縮約します。

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

サンプルコード

import numpy as np

# array()メソッドを使って2つのNumPy 3D配列を作成
arr1 = np.arange(60.).reshape(3,4,5)
arr2 = np.arange(24.).reshape(4,3,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,0],[0,1])))

実行結果

Array1...
[[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]]

[[20. 21. 22. 23. 24.]
[25. 26. 27. 28. 29.]
[30. 31. 32. 33. 34.]
[35. 36. 37. 38. 39.]]

[[40. 41. 42. 43. 44.]
[45. 46. 47. 48. 49.]
[50. 51. 52. 53. 54.]
[55. 56. 57. 58. 59.]]]

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

[[ 6. 7.]
[ 8. 9.]
[10. 11.]]

[[12. 13.]
[14. 15.]
[16. 17.]]

[[18. 19.]
[20. 21.]
[22. 23.]]]

Dimensions of Array1...
3

Dimensions of Array2...
3

Shape of Array1...
(3, 4, 5)

Shape of Array2...
(4, 3, 2)

Tensor dot product...
[[4400. 4730.]
[4532. 4874.]
[4664. 5018.]
[4796. 5162.]
[4928. 5306.]]

  1. Pythonでリストのインデックスを指数として累乗を計算する方法

    リストの各要素を、そのインデックス(添字)を指数として累乗したい場合があります。このような処理は、シンプルな反復処理と ** 演算子(べき乗演算子)を組み合わせることで簡単に実現できます。サンプルコード以下に具体的な実装例を示します。my_list = [62, 18, 12, 63, 44, 75] print(The list is :) print(my_list) my_result = [] for my_index, elem in enumerate(my_list): my_result.append(elem ** my_index) print(The res

  2. Pythonで文字「G」のパターンを出力するプログラム

    コンソールにアスタリスク(*)を使って文字「G」のパターンを表示したい場合、専用の関数を定義し、二重ループ(ネストされたループ)で行と列を走査しながら、条件に合致する位置だけ「*」を出力する方法が有効です。以下に実際の実装例を示します。サンプルコードdef display_pattern(my_line): my_pattern = for i in range(my_line): for j in range(my_line): if ((j == 1 and i != 0 and i != my_line - 1)