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

파이썬 NumPy einsum()으로 아인슈타인 합 규약 기반 스칼라 곱셈 수행하기

파이썬에서 아인슈타인 합 규약(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()은 단순 스칼라 곱셈뿐 아니라 행렬 곱, 전치, 내적 등 다양한 배열 연산을 하나의 통합된 인터페이스로 처리할 수 있는 강력한 도구입니다.