파이썬의 namedtuple
은 튜플의 불변성과 효율성을 유지하면서, 각 요소에 대해 이름을 부여하여 보다 직관적으로 접근할 수 있게 합니다. namedtuple
은 불변(immutable) 구조이므로, 값을 수정할 수는 없지만, 이를 상속받아 새로운 다차원 자료구조를 만들면 더 복잡한 데이터 구조를 직관적으로 관리할 수 있습니다.
다차원 자료구조는 여러 레벨에서 데이터를 관리하거나, 다중 차원의 데이터를 구조화하는 데 유용합니다. 이를 위해 namedtuple
을 상속받아 다차원 데이터를 관리하는 클래스 예제를 만들어 보겠습니다.
예제: namedtuple
을 상속한 다차원 자료구조
namedtuple
을 상속받아 3D 좌표나 다차원 벡터와 같은 자료구조를 만드는 예제를 소개합니다. 이 예제에서는 Vector3D
라는 다차원 자료구조를 만들고, 각 차원(x, y, z)에 이름을 부여하여 데이터를 관리합니다.
예제 코드:
from collections import namedtuple
# 2D 벡터 정의를 위한 기본 namedtuple 정의
class Vector3D(namedtuple('Vector3DBase', ['x', 'y', 'z'])):
# 벡터의 길이를 계산하는 메서드 추가
def magnitude(self):
return (self.x**2 + self.y**2 + self.z**2) ** 0.5
# 벡터의 합을 계산하는 메서드 추가
def add(self, other):
return Vector3D(self.x + other.x, self.y + other.y, self.z + other.z)
# 벡터의 스칼라 곱을 계산하는 메서드 추가
def scalar_multiply(self, scalar):
return Vector3D(self.x * scalar, self.y * scalar, self.z * scalar)
# 벡터를 출력하는 메서드
def display(self):
print(f"Vector3D(x={self.x}, y={self.y}, z={self.z})")
# 사용 예제
# 두 개의 Vector3D 객체 생성
v1 = Vector3D(1, 2, 3)
v2 = Vector3D(4, 5, 6)
# 벡터 정보 출력
print("Vector 1:")
v1.display()
print("\nVector 2:")
v2.display()
# 벡터의 합 계산
v3 = v1.add(v2)
print("\nVector 1 + Vector 2 =")
v3.display()
# 스칼라 곱 계산
v4 = v1.scalar_multiply(3)
print("\nVector 1 * 3 =")
v4.display()
# 벡터의 길이 계산
print(f"\nMagnitude of Vector 1: {v1.magnitude()}")
설명:
namedtuple
상속:Vector3D
클래스는namedtuple
을 상속받았으며,x
,y
,z
세 개의 좌표(차원)을 저장합니다.namedtuple('Vector3DBase', ['x', 'y', 'z'])
는 불변의namedtuple
을 정의하고, 이를 상속받아Vector3D
클래스를 확장합니다.
- 추가 메서드:
magnitude()
메서드는 벡터의 길이(크기)를 계산합니다.add()
메서드는 두 벡터를 더한 새로운 벡터를 반환합니다.scalar_multiply()
메서드는 벡터를 주어진 스칼라 값으로 곱한 새로운 벡터를 반환합니다.display()
메서드는 벡터의 좌표를 출력하는 역할을 합니다.
- 불변성:
namedtuple
은 불변(immutable)이므로, 기존 값을 수정할 수 없고, 새로운 값을 계산할 때는 항상 새로운 객체가 반환됩니다.
- 벡터 연산:
- 벡터의 합 연산과 스칼라 곱을 구현하여 벡터 연산을 지원합니다.
실행 결과:
Vector 1:
Vector3D(x=1, y=2, z=3)
Vector 2:
Vector3D(x=4, y=5, z=6)
Vector 1 + Vector 2 =
Vector3D(x=5, y=7, z=9)
Vector 1 * 3 =
Vector3D(x=3, y=6, z=9)
Magnitude of Vector 1: 3.7416573867739413
주요 포인트:
namedtuple
을 상속하여 불변성 유지:namedtuple
의 불변성을 유지하면서, 벡터 연산과 같은 기능을 추가할 수 있습니다.- 다차원 데이터 구조화: 이 예제에서는 3D 벡터를 다루었지만,
namedtuple
을 상속받아 더 많은 차원의 데이터를 다룰 수 있습니다. - 효율적인 자료 구조:
namedtuple
은 메모리 사용량이 적고 성능이 좋습니다. 따라서 다차원 데이터를 다룰 때 효율적입니다. - 직관적인 접근: 각 차원에 이름을 부여하여
v1.x
,v1.y
,v1.z
와 같이 직관적으로 접근할 수 있습니다.
이와 같은 방법을 사용하면, 파이썬에서 복잡한 다차원 데이터를 구조화하고 효율적으로 다룰 수 있으며, 이를 통해 벡터, 좌표계, 데이터 포인트 등의 다양한 응용 분야에 활용할 수 있습니다.
'다차원 자료구조 생성 및 방법' 카테고리의 다른 글
[다차원 자료구조 생성 및 방법] 네임드 튜플 `collections` 모듈 자료구조 (11) | 2024.10.21 |
---|---|
[다차원 자료구조 생성 및 방법] 파이썬에서의 벡터 공간 (4) | 2024.10.19 |
[다차원 자료구조 생성 및 방법] 딕셔너리 상속 다차원 자료구조 1 (0) | 2024.10.16 |
[다차원 자료구조 생성 및 방법] 리스트 상속 다차원 자료구조 1 (0) | 2024.10.16 |
[다차원 자료구조 생성 및 방법] 다차원 자료구조 모델 1 (2) | 2024.10.15 |