행렬 크기와 저장량을 구분한다
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 분해 / 촐레스키 분해 / 행렬 지수 함수 / 벡터 / 행렬 조건수 / 부동 소수점