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

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)


  1. 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解決のための手順この問題を解くには、以下の手順に従います。結果

  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)