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

Python NumPy로 두 배열의 크로네커 곱(Kronecker Product) 구하는 방법

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가 됩니다. 이처럼 크로네커 곱의 결과 크기는 항상 두 입력 배열 크기의 곱과 같습니다.