Pythonで1次元ベクトルの内積を計算する方法(numpy.vdot()の使い方)
Pythonで1次元ベクトルの内積(ドット積)を返すには、NumPyライブラリが提供する numpy.vdot() メソッドを使用します。
vdot(a, b) 関数は、dot(a, b) とは複素数の扱い方が異なります。第1引数が複素数の場合、内積の計算にはその複素共役が使用されます。また、vdot は多次元配列に対しても dot とは異なる動作をします。行列積を計算するのではなく、まず入力引数を1次元ベクトルに平坦化(flatten)してから内積を求めます。そのため、vdot はベクトル専用の関数として使用すべきです。
このメソッドは、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)1次元ベクトルの内積を返すには、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)
# 1次元ベクトルの内積を返すには、numpy.vdot() メソッドを使用
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)