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.]]
-
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
-
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)