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()이나 @ 연산자를 사용해야 한다는 점을 기억해 두시기 바랍니다.