Main Content

spalloc

희소 행렬에 대한 공간 할당

설명

예제

S = spalloc(m,n,nz)nz개의 0이 아닌 요소를 저장할 공간이 있는 크기 m×n의 모두 0인 희소 행렬 S를 만듭니다(단, nz >= 1).

예제

모두 축소

spalloc를 사용하여 최대 20개의 0이 아닌 요소에 대한 공간이 있는 10×10의 모두 0인 희소 행렬을 초기화합니다.

S = spalloc(10,10,20);

이 행렬의 여러 요소를 정의합니다.

S(1:3,1:3) = magic(3)
S = 
   (1,1)        8
   (2,1)        3
   (3,1)        4
   (1,2)        1
   (2,2)        5
   (3,2)        9
   (1,3)        6
   (2,3)        7
   (3,3)        2

행렬에 있는 0이 아닌 요소의 개수를 표시합니다.

n1 = nnz(S)
n1 = 9

0이 아닌 행렬 요소에 할당되는 저장 공간의 양을 표시합니다.

n2 = nzmax(S)
n2 = 20

spalloc를 사용하여 0이 아닌 요소 100개에 대한 공간이 있는 20×20의 모두 0인 희소 행렬을 초기화합니다.

n = 20;
S = spalloc(n,n,5*n);

그런 다음 for 루프를 사용하여 S의 열을 한 번에 하나씩 평균적으로 열당 최대 5개의 0이 아닌 요소로 채웁니다.

for j = 1:n
    S(:,j) = [zeros(n-5,1); round(rand(5,1))];
end

행렬 S의 희소성 패턴을 플로팅합니다. 점은 0이 아닌 요소를 나타냅니다.

spy(S)

Figure contains an axes object. The axes object with xlabel nz = 54 contains a line object which displays its values using only markers.

행렬에 있는 0이 아닌 요소의 개수를 표시합니다.

n1 = nnz(S)
n1 = 54

0이 아닌 행렬 요소에 할당되는 저장 공간의 양을 표시합니다.

n2 = nzmax(S)
n2 = 100

입력 인수

모두 축소

행렬 행의 개수로, 음이 아닌 정수로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

행렬 열의 개수로, 음이 아닌 정수로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

0이 아닌 요소에 대한 저장 공간 할당으로, 음이 아닌 정수로 지정됩니다. nz의 값을 0으로 지정하면 spallocnz의 값을 1로 대신 설정합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

제한 사항

  • 두 행렬 차원 mn 모두 32비트 플랫폼의 경우 2^31-1보다 작거나 64비트 플랫폼의 경우 2^48-1보다 작아야 합니다.

  • spalloc로 만든 행렬에 여러 번 대입하는 경우, 미리 할당된 메모리 때문에 반복 재할당이 방해를 받을 수 있습니다. 어떻든 희소 행렬에 대입하는 작업은 여전히 상대적으로 비용이 많이 소모되는 연산이므로, 다음 중 하나로 쉽게 대체할 수 있다면 보통은 피하는 것이 좋습니다.

    • sparse 함수에 대한 일회성 호출

    • spdiags 함수에 대한 일회성 호출

    • 행렬 집합의 일회성 결합(희소, 조밀 둘 다 가능)

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨