파이썬에서 4차원 배열의 역(inverse)을 계산하려면 numpy.linalg.tensorinv() 메서드를 사용하면 됩니다. 이 메서드가 반환하는 결과는 tensordot 연산인 tensordot(a, b, ind)에 대한 역수이며, 부동 소수점 정밀도 오차 범위 내에서 tensordot(tensorinv(a), a, ind)는 tensordot 연산의 '항등(identity)' 텐서가 됩니다.
tensorinv() 메서드의 매개변수
이 메서드는 입력 텐서 a의 tensordot 역수를 반환하며, 반환값의 shape는 a.shape[ind:] + a.shape[:ind] 입니다.
- a : '역'을 구할 대상 텐서입니다. 형태(shape)가 '정방(square)'이어야 합니다. 즉,
prod(a.shape[:ind]) == prod(a.shape[ind:])조건을 만족해야 합니다. - ind : 역합(inverse sum)에 포함되는 첫 번째 인덱스의 개수입니다. 반드시 양의 정수여야 하며, 기본값은 2입니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
from numpy.linalg import invnumpy.eye()는 대각선에는 1이, 나머지 위치에는 0이 채워진 2차원 배열을 생성합니다.
arr = np.eye(4*6)앞에서 생성한 배열의 형태(shape)를 변경합니다.
arr.shape = (4, 6, 8, 3)생성된 배열을 출력합니다.
print("Our Array...\n",arr)배열의 차원 수를 확인합니다.
print("\nDimensions of our Array...\n",arr.ndim)배열 객체의 데이터 타입(dtype)을 확인합니다.
print("\nDatatype of our Array object...\n",arr.dtype)배열 객체의 형태(shape)를 확인합니다.
print("\nShape of our Array object...\n",arr.shape)numpy.linalg.tensorinv() 메서드를 호출하여 4차원 배열의 역을 계산합니다.
print("\nResult...\n",np.linalg.tensorinv(arr))전체 예제 코드
import numpy as np
from numpy.linalg import inv
# 배열 생성
# numpy.eye()는 대각선에는 1, 나머지는 0으로 채운 2차원 배열을 반환합니다.
arr = np.eye(4*6)
# 위에서 생성한 배열의 형태(shape) 변경
arr.shape = (4, 6, 8, 3)
# 배열 출력
print("Our Array...\n",arr)
# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)
# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)
# 형태(shape) 확인
print("\nShape of our Array object...\n",arr.shape)
# numpy.linalg.tensorinv() 메서드로 4차원 배열의 역 계산
print("\nResult...\n",np.linalg.tensorinv(arr))
출력 결과
Our Array...
[[[[1. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
...
[0. 0. 1.]]]]
Dimensions of our Array...
4
Datatype of our Array object...
float64
Shape of our Array object...
(4, 6, 8, 3)
Result...
[[[[1. 0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0.]
...
[0. 0. 0. 0. 0. 1.]]]]
참고 사항
tensorinv()는 일반적인 2차원 행렬의 역행렬을 구하는 np.linalg.inv()와 달리, 다차원 텐서 간의 tensordot 연산에 대한 역을 구할 때 사용합니다. 입력 텐서의 앞부분 인덱스 곱(prod)과 뒷부분 인덱스 곱이 동일한 '정방' 형태여야만 정상적으로 동작하며, 그렇지 않으면 오류가 발생합니다. 본 예제에서는 (4, 6, 8, 3) 형태의 4차원 배열에 대해 ind=2 기본값이 적용되어, 앞의 두 축 곱(4×6=24)과 뒤의 두 축 곱(8×3=24)이 일치하므로 역 텐서가 성공적으로 계산됩니다.