Python의 NumPy 라이브러리에서 numpy.kron() 메서드를 사용하면 두 배열의 크로네커 곱(Kronecker Product)을 손쉽게 계산할 수 있습니다.
크로네커 곱은 첫 번째 배열의 각 요소로 두 번째 배열을 스케일링한 블록들로 구성된 복합 배열입니다. 선형대수학에서 신호 처리, 이미지 변환, 텐서 연산 등 다양한 분야에서 활용되는 중요한 연산입니다.
크로네커 곱의 동작 원리
numpy.kron() 함수는 배열 a와 b의 차원 수가 같다고 가정합니다. 만약 차원 수가 다르다면, 더 작은 쪽 배열 앞에 1차원을 추가하여 맞춥니다.
배열 a의 형태가 (r0, r1, ..., rN)이고 배열 b의 형태가 (s0, s1, ..., sN)이라면, 크로네커 곱의 결과 배열은 다음과 같은 형태를 가집니다.
(r0*s0, r1*s1, ..., rN*sN)
결과 배열의 각 요소는 a와 b의 요소들의 곱으로 구성되며, 다음과 같이 명시적으로 표현됩니다.
kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
구현 단계
1단계: 라이브러리 임포트
먼저 필요한 라이브러리를 가져옵니다.
import numpy as np
2단계: 배열 생성
array() 메서드를 사용해 두 개의 NumPy 배열을 생성합니다.
arr1 = np.array([1, 10, 100]) arr2 = np.array([5, 6, 7])
3단계: 배열 출력 및 속성 확인
생성한 배열과 각 배열의 차원(ndim), 형태(shape)를 확인합니다.
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)4단계: 크로네커 곱 계산
numpy.kron() 메서드를 사용해 두 배열의 크로네커 곱을 구합니다.
print("\nResult (Kronecker product)...\n", np.kron(arr1, arr2))전체 예제 코드
import numpy as np
# array() 메서드로 두 개의 NumPy 배열 생성
arr1 = np.array([1, 10, 100])
arr2 = np.array([5, 6, 7])
# 배열 출력
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.kron() 메서드로 크로네커 곱 계산
print("\nResult (Kronecker product)...\n", np.kron(arr1, arr2))실행 결과
Array1... [ 1 10 100] Array2... [5 6 7] Dimensions of Array1... 1 Dimensions of Array2... 1 Shape of Array1... (3,) Shape of Array2... (3,) Result (Kronecker product)... [ 5 6 7 50 60 70 500 600 700]
결과 해석
실행 결과를 보면, 크로네커 곱은 arr1의 각 요소에 arr2 전체를 곱한 결과가 순서대로 이어진 형태임을 알 수 있습니다.
- 1 × [5, 6, 7] → [5, 6, 7]
- 10 × [5, 6, 7] → [50, 60, 70]
- 100 × [5, 6, 7] → [500, 600, 700]
따라서 최종 결과는 [5, 6, 7, 50, 60, 70, 500, 600, 700]이 되며, 입력 배열의 길이가 각각 3이므로 결과 배열의 길이는 3×3 = 9가 됩니다. 이처럼 크로네커 곱의 결과 크기는 항상 두 입력 배열 크기의 곱과 같습니다.