Python에서 두 배열의 외적(Outer Product)을 계산하려면 numpy.outer() 메서드를 사용하면 됩니다. 이 함수는 선형대수학에서 널리 사용되는 연산으로, 두 벡터를 입력받아 그 외적에 해당하는 행렬을 반환합니다.
numpy.outer() 함수의 매개변수
numpy.outer() 메서드는 다음과 같은 매개변수를 가집니다.
- a: 첫 번째 입력 벡터입니다. 만약 1차원이 아니라면 자동으로 평탄화(flatten)됩니다.
- b: 두 번째 입력 벡터입니다. 마찬가지로 1차원이 아니라면 자동으로 평탄화됩니다.
- out (선택 사항): 계산 결과가 저장될 위치입니다.
외적의 수학적 정의
두 벡터 a = [a0, a1, ..., aM]와 b = [b0, b1, ..., bN]이 주어졌을 때, 외적은 다음과 같이 정의됩니다.
[[a0*b0 a0*b1 ... a0*bN ] [a1*b0 . . ] [ ... . . ] [aM*b0 aM*bN ]]
즉, 결과는 첫 번째 벡터의 각 원소와 두 번째 벡터의 각 원소를 곱한 값들로 구성된 (M+1)×(N+1) 크기의 행렬이 됩니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
array() 메서드를 사용하여 두 개의 1차원 NumPy 배열을 생성합니다.
arr1 = np.array([5, 10, 15]) arr2 = np.array([20, 25, 30])
생성된 배열을 출력하여 확인합니다.
print("Array1...\n", arr1)
print("\nArray2...\n", arr2)두 배열의 차원(dimension)을 확인합니다.
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.outer() 메서드를 사용하여 두 배열의 외적을 계산합니다.
print("\nResult (Outer Product)...\n", np.outer(arr1, arr2))전체 예제 코드
import numpy as np
# array() 메서드로 두 개의 1차원 NumPy 배열 생성
arr1 = np.array([5, 10, 15])
arr2 = np.array([20, 25, 30])
# 배열 출력
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.outer() 메서드로 외적 계산
print("\nResult (Outer Product)...\n", np.outer(arr1, arr2))실행 결과
Array1... [ 5 10 15] Array2... [20 25 30] Dimensions of Array1... 1 Dimensions of Array2... 1 Shape of Array1... (3,) Shape of Array2... (3,) Result (Outer Product)... [[100 125 150] [200 250 300] [300 375 450]]
정리
위 실행 결과를 보면, 길이가 3인 두 1차원 배열의 외적은 3×3 크기의 행렬로 반환됩니다. 각 행렬의 요소는 첫 번째 배열의 원소와 두 번째 배열의 원소를 순서대로 곱한 값입니다. 예를 들어 결과 행렬의 첫 번째 요소 100은 5 × 20에서, 마지막 요소 450은 15 × 30에서 계산된 것입니다. numpy.outer()는 입력 벡터가 다차원 배열이라도 자동으로 1차원으로 평탄화하여 처리하므로, 벡터 간 외적 연산을 간편하게 수행할 수 있습니다.