Pythonで2つのベクトルの内積を返す方法(numpy.vdotの使い方)
Pythonで2つのベクトルの内積(ドット積)を計算して返すには、NumPyのnumpy.vdot()メソッドを使用します。vdot(a, b)関数は、複素数の扱いにおいてdot(a, b)とは異なる動作をする点に注意が必要です。第1引数が複素数の場合、内積の計算には第1引数の複素共役が使用されます。
また、vdotは多次元配列に対してもdotとは異なる挙動を示します。行列積を計算するのではなく、入力された引数をまず1次元ベクトルへと平坦化(フラット化)してから内積を求めます。そのため、この関数はベクトル専用として使うのが適切です。
戻り値はaとbの内積であり、aとbの型に応じてint、float、complexのいずれかになります。第1パラメータはaで、aが複素数の場合は計算前に複素共役が取られます。bは内積を取る相手となる第2パラメータです。
手順
まず、必要なライブラリをインポートします。
import numpy as np
array()メソッドを使って、2つのNumPyの1次元配列を作成します。
arr1 = np.array([2+3j,5+6j]) arr2 = np.array([9+10j,11+12j])
作成した配列を表示します。
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)2つのベクトルの内積を返すには、numpy.vdot()メソッドを使用します。
print("\nResult...\n",np.vdot(arr1, arr2))
完全なコード例
import numpy as np
# array()メソッドを使って2つのNumPyの1次元配列を作成
arr1 = np.array([2+3j,5+6j])
arr2 = np.array([9+10j,11+12j])
# 配列を表示
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.vdot()メソッドで2つのベクトルの内積を返す
print("\nResult...\n",np.vdot(arr1, arr2))実行結果
Array1... [2.+3.j 5.+6.j] Array2... [ 9.+10.j 11.+12.j] Dimensions of Array1... 1 Dimensions of Array2... 1 Shape of Array1... (2,) Shape of Array2... (2,) Result... (175-13j)
-
Pythonで2つのスパースベクトルの内積を計算するプログラム
問題の概要ここでは、2つのリストで表現されたスパースベクトル(疎なベクトル)が与えられ、その内積(ドット積)を求めることを考えます。ベクトルはオブジェクトとして表現され、各要素のリストはオブジェクトのメンバー変数 nums に格納されています。例えば、入力が以下のような場合を考えてみましょう。vector1 = [1, 0, 0, 0, 1]vector2 = [0, 0, 0, 1, 1]このときの出力は 1 になります。内積の計算は次のとおりです。1 × 0 + 0 × 0 + 0 × 0 + 0 × 1 + 1 × 1 = 1解決のための手順この問題を解くには、以下の手順に従います。結果
-
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)