Main Content

희소 행렬의 계산상의 이점

메모리 관리

희소 행렬을 사용하여 대부분의 값이 0인 요소로 구성된 데이터를 저장하면 상당량의 메모리를 절약하는 동시에 데이터의 처리 속도를 향상시킬 수 있습니다. sparsedouble형 요소나 logical형 요소로 구성된 2차원 MATLAB® 행렬에 할당할 수 있는 특성(Attribute)입니다.

sparse 특성을 사용하면 MATLAB에서 다음을 수행할 수 있습니다.

  • 행렬에서 0이 아닌 요소만 해당 인덱스와 함께 저장합니다.

  • 0 요소에 대한 연산을 제거하여 계산 시간을 줄입니다.

비희소 행렬(Full Matrix)의 경우, MATLAB은 모든 행렬 요소를 내부적으로 저장합니다. 값이 0인 요소는 다른 모든 행렬 요소와 동일한 크기의 저장 공간을 필요로 합니다. 그러나 희소 행렬의 경우, MATLAB은 0이 아닌 요소와 해당 인덱스만 저장합니다. 값이 0인 요소의 비율이 높은, 크기가 큰 행렬의 경우, 이 방식은 데이터 저장에 필요한 메모리의 크기를 상당히 줄입니다.

whos 명령은 크기와 저장소 클래스를 포함한 행렬 저장소에 대한 개괄적 정보를 제공합니다. 예를 들어, 이 whos 목록은 동일한 행렬의 희소 버전과 비희소 버전에 대한 정보를 보여줍니다.

M_full = magic(1100);          % Create 1100-by-1100 matrix.
M_full(M_full > 50) = 0;       % Set elements >50 to zero.
M_sparse = sparse(M_full);     % Create sparse matrix of same.

whos
  Name             Size                Bytes  Class     Attributes

  M_full        1100x1100            9680000  double              
  M_sparse      1100x1100               9608  double    sparse  

희소 행렬에서 사용되는 바이트 수는 값이 0인 요소가 저장되지 않으므로 더 적습니다.

계산 효율성

희소 행렬은 계산 효율성 측면에서도 상당한 이점이 있습니다. 비희소 행렬을 사용하는 연산과 달리, 희소 행렬을 사용하는 연산은 0 더하기(x+0은 항상 x임)와 같이 불필요한 로우 레벨 산술 연산을 수행하지 않습니다. 그 결과 얻게 되는 효율성으로, 대량의 희소 형식 데이터를 사용하여 작업을 수행하는 프로그램의 실행 시간에 급격한 향상이 이뤄질 수 있습니다.

관련 항목