답변:
첫째, 구현에 따라 다릅니다. 희소 행렬을 밀도가 높은 행렬로 구현하고 0이 아닌 값을 채우면 행렬의 전체 크기에 따라 크기가 조정됩니다. 0이 아닌 값으로 저장되면 액세스 시간이 매트릭스 크기에 따라 크기가 조정되므로 크기가 조정됩니다.
PETSc 문서 에서 스파 스 행렬의 기본 저장소는 압축 된 행 저장소이며 행 수 및 행당 0이 아닌 값의 수로 확장됩니다. 따라서 MatMat이이 측정 값의 제곱으로 확장 될 것으로 기대합니다. 즉 .
그러나 주목해야 할 것은 존재하지 않는 것을 저장하는 포인트가 없다는 것입니다. 이 성능에 관심이 있다면 왜 1000x1000 매트릭스에 100 개의 값을 저장합니까? 이는 행 / 열의 90 % 이상이 전혀 0이 아닌 값을 가지지 않으며 행렬에서 완전히 제거 될 수 있음을 의미합니다. 0이 아닌 값의 패턴이 변경되지 않으면이 행렬과 대상 행렬 모두에서 항상 0으로 된 행을 제거하는 것이 좋습니다. 그것은 노력의 약 90 %를 제거하여 두 행렬 (100 2 , 1000 2 ) 의 성능을 대체로 동일하게 유지합니다.