파이썬 딕셔너리를 이용한 희소 행렬(Sparse Matrix) 구현
희소 행렬(Sparse Matrix)은 대부분의 원소가 0인 행렬을 효율적으로 저장하는 방법입니다. 이러한 행렬을 일반적인 2차원 리스트로 저장하면 불필요하게 많은 메모리를 차지할 수 있습니다. 이를 해결하기 위해 딕셔너리 자료구조를 사용하여 0이 아닌 원소만 저장하는 방식으로 구현할 수 있습니다.
파이썬 딕셔너리를 활용한 희소 행렬은 행렬에서 값이 존재하는 위치만 기록해두어 메모리 사용을 줄이는 것이 특징입니다.
희소 행렬 구현 방법
딕셔너리를 사용하여 희소 행렬을 구현하는 기본적인 방법은 위치(좌표)를 키로, 해당 위치의 값을 값으로 저장하는 방식입니다. 예를 들어 (row, col): value
형식으로 값을 저장합니다.
구현 예제
아래 예제에서는 딕셔너리로 희소 행렬을 생성하고, 특정 원소를 추가, 조회, 출력하는 방법을 보여줍니다.
class SparseMatrix:
def __init__(self, rows, cols):
self.rows = rows
self.cols = cols
self.data = {}
def set_value(self, row, col, value):
if row >= self.rows or col >= self.cols:
raise IndexError("Index out of bounds.")
if value != 0:
self.data[(row, col)] = value
elif (row, col) in self.data:
del self.data[(row, col)]
def get_value(self, row, col):
if row >= self.rows or col >= self.cols:
raise IndexError("Index out of bounds.")
return self.data.get((row, col), 0)
def display(self):
for row in range(self.rows):
for col in range(self.cols):
print(self.get_value(row, col), end=" ")
print()
# 예제 사용
sparse_matrix = SparseMatrix(4, 5)
sparse_matrix.set_value(0, 1, 5)
sparse_matrix.set_value(1, 3, 8)
sparse_matrix.set_value(3, 4, 3)
print("희소 행렬 출력:")
sparse_matrix.display()
코드 설명
- 초기화:
SparseMatrix
클래스는rows
와cols
를 받아 행렬 크기를 설정하고,data
라는 딕셔너리를 초기화합니다. - 값 설정:
set_value
메서드는(row, col)
위치에 값을 저장하며, 값이 0이면 해당 위치를data
에서 제거합니다. - 값 조회:
get_value
메서드는(row, col)
위치의 값을 반환하며, 값이 없는 경우 0을 반환합니다. - 행렬 출력:
display
메서드는 전체 행렬을 출력합니다. 없는 값은 자동으로 0으로 채워서 출력됩니다.
출력 결과
희소 행렬 출력:
0 5 0 0 0
0 0 0 8 0
0 0 0 0 0
0 0 0 0 3
희소 행렬의 활용 예시
이와 같은 희소 행렬은 그래프의 인접 행렬 표현, 데이터 과학에서 희소 데이터를 다룰 때, 그리고 기계 학습에서 고차원 특성 데이터를 효율적으로 저장하고 계산하는 데 유용하게 사용됩니다.
'확률 분포 생성 및 방법' 카테고리의 다른 글
[확률 분포 생성 및 방법] 게임 아이템 당첨 확률 모델 예시 (4) | 2024.10.28 |
---|---|
[확률 분포 생성 및 방법] 확률 통계 생성 목적 데이터 자료구조 (2) | 2024.10.25 |
[확률 분포 생성 및 방법] 확률 분포 클래스 3 (0) | 2024.10.22 |
[확률 분포 생성 및 방법] 확률 분포 클래스 2 (0) | 2024.10.20 |
[확률 분포 생성 및 방법] 연속 확률 분포 설명 및 예제 코드 (1) | 2024.10.19 |