numpy.tensordot() 메서드란?
두 텐서 a와 b, 그리고 두 개의 배열류 객체(a_axes, b_axes)를 포함하는 배열류 객체가 주어지면, a_axes와 b_axes로 지정된 축을 따라 a와 b의 요소(성분)들의 곱을 합산합니다. 세 번째 인수는 음수가 아닌 단일 정수 스칼라 N일 수도 있는데, 이 경우 a의 마지막 N개 차원과 b의 처음 N개 차원에 대해 합산이 수행됩니다.
차원이 서로 다른 배열에 대해 텐서 내적(tensor dot product)을 계산하려면 numpy.tensordot() 메서드를 사용하면 됩니다. 매개변수 a와 b는 내적을 수행할 텐서이며, axes 매개변수에 정수 N이 지정되면 a의 마지막 N개 축과 b의 처음 N개 축을 순서대로 합산합니다. 이때 서로 대응하는 축의 크기는 반드시 일치해야 합니다.
단계별 구현 방법
1. 필요한 라이브러리 임포트
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
2. 차원이 다른 두 배열 생성
array() 메서드를 사용하여 서로 다른 차원을 가진 두 개의 NumPy 배열을 생성합니다.
arr1 = np.array(range(1, 9))
arr1.shape = (2, 2, 2)
arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
arr2.shape = (2, 2)3. 배열 출력하기
생성된 두 배열을 화면에 출력합니다.
print("Array1...\n",arr1)
print("\nArray2...\n",arr2)4. 배열의 차원 확인
두 배열의 차원(ndim)을 확인합니다.
print("\nDimensions of Array1...\n",arr1.ndim)
print("\nDimensions of Array2...\n",arr2.ndim)5. 배열의 형태(shape) 확인
두 배열의 형태(shape)를 확인합니다.
print("\nShape of Array1...\n",arr1.shape)
print("\nShape of Array2...\n",arr2.shape)6. 텐서 내적 계산하기
차원이 다른 배열에 대해 텐서 내적을 계산하려면 Python에서 numpy.tensordot() 메서드를 사용합니다.
print("\nTensor dot product...\n", np.tensordot(arr1, arr2))전체 예제 코드
import numpy as np
# array() 메서드를 사용해 차원이 다른 두 개의 NumPy 배열 생성
arr1 = np.array(range(1, 9))
arr1.shape = (2, 2, 2)
arr2 = np.array(('p', 'q', 'r', 's'), dtype=object)
arr2.shape = (2, 2)
# 배열 출력
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.tensordot() 메서드 사용
print("\nTensor dot product...\n", np.tensordot(arr1, arr2))실행 결과
Array1... [[[1 2] [3 4]] [[5 6] [7 8]]] Array2... [['p' 'q'] ['r' 's']] Dimensions of Array1... 3 Dimensions of Array2... 2 Shape of Array1... (2, 2, 2) Shape of Array2... (2, 2) Tensor dot product... ['pqqrrrssss' 'pppppqqqqqqrrrrrrrssssssss']
실행 결과를 보면, 3차원 배열 arr1의 마지막 2개 축과 2차원 배열 arr2의 전체 2개 축이 대응되어 합산되면서 문자열 형태의 텐서 내적 결과가 출력됩니다. 이처럼 numpy.tensordot()은 서로 차원이 다른 배열 간의 내적 연산도 문제없이 처리할 수 있어, 다차원 데이터를 다루는 과학 계산이나 딥러닝 전처리 작업에서 매우 유용하게 활용됩니다.