위키득계정 ↗
과학

희소행렬

희소행렬과학
영문명
Sparse matrix
특성
0이 아닌 원소가 상대적으로 적음
저장 정보
값과 위치 등
비교 대상
모든 원소를 저장하는 밀집 형식
희소행렬은 원소의 상당 부분이 0인 행렬이다. 희소 저장 형식은 주로 0이 아닌 값과 위치 정보를 보관하여 메모리와 연산을 줄인다. 수학적인 행렬의 크기는 그대로이며 빈 위치는 누락된 관측값이 아니라 0을 의미한다.

행렬 크기와 저장량을 구분한다

10000행 10000열 행렬에는 원소 위치가 1억 개 있다. 대각선 10000개만 0이 아니면 비영 원소의 비율은 0.01퍼센트다. 모든 위치를 8바이트 값으로 저장하면 값 부분만 8억 바이트지만 희소 형식에서는 위치 정보 등의 추가 비용과 함께 비영 성분을 중심으로 저장한다.

위치를 빼면 다른 행렬이 된다

4행 4열 행렬의 (1,3)에 2, (4,2)에 -1만 있고 나머지는 0이라고 하자. 값 2와 -1만으로는 어느 위치인지 알 수 없다. 행과 열의 크기, 원소의 위치도 표현에 필요하다. 전체가 0인 행이나 열이 있다고 행렬의 차원이 자동으로 줄어드는 것은 아니다.

벡터 곱의 계산 예

위 행렬에 열벡터 (5,6,7,8)을 곱하면 결과는 (14,0,0,-6)이다. 첫 행은 세 번째 성분에 2를 곱하고 마지막 행은 두 번째 성분에 -1을 곱한다. 원소의 위치를 알고 있으므로 0과의 불필요한 곱셈을 줄이는 계산을 구성할 수 있다.

결과도 항상 희소한 것은 아니다

희소행렬을 입력했다고 모든 연산의 결과까지 희소하다는 보장은 없다. 행렬 분해 중 새로운 비영 성분이 생길 수도 있다. 비영 원소가 많아지면 위치 정보의 비용도 커진다. 아주 작은 값을 임의로 0으로 바꾸는 근사와 원래 0을 효율적으로 저장하는 작업은 구분한다.

관련 문서

행렬 / 단위행렬 / LU 분해 / 촐레스키 분해 / 행렬 지수 함수 / 벡터 / 행렬 조건수 / 부동 소수점