파이썬에서 아인슈타인 합 규약(Einstein Summation Convention)을 활용해 스칼라 곱셈을 수행하려면 numpy.einsum() 메서드를 사용하면 됩니다.
einsum() 메서드의 첫 번째 매개변수는 서브스크립트(subscript)입니다. 쉼표로 구분된 서브스크립트 라벨 목록을 통해 어떤 연산을 수행할지 지정합니다. 두 번째 매개변수는 피연산자(operands)로, 연산에 사용될 배열들을 의미합니다.
einsum() 메서드는 피연산자에 대해 아인슈타인 합 규약을 평가합니다. 이 규약을 활용하면 다차원 선형대수 연산의 대부분을 간결한 표기법으로 나타낼 수 있습니다.
- 암시적 모드(implicit mode): einsum이 자동으로 합계를 계산합니다.
- 명시적 모드(explicit mode): 특정 서브스크립트 라벨에 대한 합산을 비활성화하거나 강제하여, 고전적인 아인슈타인 합 연산 범위를 넘어선 다양한 배열 연산도 유연하게 수행할 수 있습니다.
단계별 구현 방법
1단계: 필수 라이브러리 임포트
import numpy as np
2단계: 배열 생성
numpy.arange()와 reshape()를 사용해 2x3 형태의 배열을 만듭니다.
arr = np.arange(6).reshape(2,3)
3단계: 스칼라 값 정의
val = 2
4단계: 배열 정보 확인
생성된 배열과 속성들을 출력해 확인합니다.
print("Our Array...\n",arr)
print("\nDimensions of our Array...\n",arr.ndim)
print("\nDatatype of our Array object...\n",arr.dtype)
print("\nShape of our Array object...\n",arr.shape)5단계: einsum()으로 스칼라 곱셈 수행
아래처럼 '..., ...' 서브스크립트를 지정하면, 각 요소에 스칼라 값을 곱하는 브로드캐스팅 곱셈이 수행됩니다.
print("\nResult (scalar multiplication)...\n",np.einsum('..., ...', val, arr))전체 예제 코드
import numpy as np
# numpy.arange()와 reshape()로 배열 생성
arr = np.arange(6).reshape(2,3)
# 스칼라 값
val = 2
# 배열 출력
print("Array...\n",arr)
# 데이터 타입 확인
print("\nDatatype of Array...\n",arr.dtype)
# 차원 확인
print("\nDimensions of Array...\n",arr.ndim)
# 형태(shape) 확인
print("\nShape of Array...\n",arr.shape)
# numpy.einsum() 메서드로 아인슈타인 합 규약 기반 스칼라 곱셈 수행
print("\nResult (scalar multiplication)...\n",np.einsum('..., ...', val, arr))실행 결과
Array... [[0 1 2] [3 4 5]] Datatype of Array... int64 Dimensions of Array... 2 Shape of Array... (2, 3) Result (scalar multiplication)... [[ 0 2 4] [ 6 8 10]]
출력 결과에서 볼 수 있듯이, 배열의 모든 요소에 스칼라 값 2가 곱해져 새로운 배열이 반환되었습니다. 이처럼 einsum()은 단순 스칼라 곱셈뿐 아니라 행렬 곱, 전치, 내적 등 다양한 배열 연산을 하나의 통합된 인터페이스로 처리할 수 있는 강력한 도구입니다.