Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python numpy.vdot()로 두 다차원 벡터의 내적 구하기

Python에서 두 다차원 벡터의 내적 반환하기

Python에서 두 다차원 벡터의 내적(dot product)을 계산하려면 numpy.vdot() 메서드를 사용하면 됩니다. vdot(a, b) 함수는 복소수를 dot(a, b)와는 다른 방식으로 처리합니다. 첫 번째 인수가 복소수인 경우, 내적을 계산할 때 해당 인수의 켤레복소수(complex conjugate)가 사용됩니다.

또한 vdot()은 다차원 배열을 dot()과 다르게 처리합니다. 행렬 곱(matrix product)을 수행하지 않고, 입력 인수를 먼저 1차원 벡터로 평탄화(flatten)한 뒤 내적을 계산합니다. 따라서 이 함수는 벡터 연산에만 사용하는 것이 좋습니다.

이 메서드는 a와 b의 내적을 반환하며, 입력값의 자료형에 따라 int, float 또는 complex 타입일 수 있습니다. 첫 번째 매개변수는 a이며, a가 복소수라면 내적 계산 전에 켤레복소수가 적용됩니다. b는 내적 계산에 사용되는 두 번째 매개변수입니다.

단계별 진행

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

array() 메서드를 사용하여 2개의 NumPy 다차원 배열을 생성합니다.

arr1 = np.array([[5, 10],[15, 20]])
arr2 = np.array([[3, 6],[9, 12]])

생성한 배열을 출력합니다.

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

두 배열의 차원(ndim)을 확인합니다.

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.vdot() 메서드를 사용하여 두 다차원 벡터의 내적을 반환합니다.

print("\nResult...\n",np.vdot(arr1, arr2))

전체 예제 코드

import numpy as np

# array() 메서드로 2개의 NumPy 다차원 배열 생성
arr1 = np.array([[5, 10],[15, 20]])
arr2 = np.array([[3, 6],[9, 12]])

# 배열 출력
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() 메서드로 두 다차원 벡터의 내적 반환
print("\nResult...\n",np.vdot(arr1, arr2))

실행 결과

Array1...
[[ 5 10]
[15 20]]

Array2...
[[ 3 6]
[ 9 12]]

Dimensions of Array1...
2

Dimensions of Array2...
2

Shape of Array1...
(2, 2)

Shape of Array2...
(2, 2)

Result...
450

결과 해설

vdot()은 다차원 배열을 그대로 사용하지 않고 1차원으로 평탄화한 후 내적을 계산합니다. 즉, arr1은 [5, 10, 15, 20]으로, arr2는 [3, 6, 9, 12]로 변환된 뒤 다음과 같이 계산됩니다.

5×3 + 10×6 + 15×9 + 20×12 = 15 + 60 + 135 + 240 = 450

이처럼 numpy.vdot()은 배열의 형태와 관계없이 요소들을 순서대로 평탄화하여 내적을 구하기 때문에, 행렬 곱이 필요한 경우에는 np.dot()이나 @ 연산자를 사용해야 한다는 점을 기억해 두시기 바랍니다.