Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

sparse

희소 행렬 생성

설명

예제

S = sparse(A)는 모든 0 요소를 제거하여 비희소 행렬(Full Matrix)을 희소 형식으로 변환합니다. 행렬에 0이 많이 포함되어 있는 경우 행렬을 희소 형식으로 변환하면 메모리가 절약됩니다.

예제

S = sparse(m,n)은 행렬의 모든 요소가 0인 희소 형식의m×n행렬을 생성합니다.

예제

S = sparse(i,j,v)S(i(k),j(k)) = v(k)를 만족하는 세 값i,j,v에서 희소 행렬S를 생성합니다.max(i)×max(j)출력 행렬에는length(v)개수의 0이 아닌 요소에 할당된 공간이 있습니다.

입력 인수i,j,v가벡터나 행렬인 경우, 요소 개수가 서로 동일해야 합니다. 또는, 인수v및/또는 인수ij중 하나가 스칼라일 수 있습니다.

예제

S = sparse(i,j,v,m,n)S의 크기를m×n으로 지정합니다.

예제

S = sparse(i,j,v,m,n,nz)nz개수의 0이 아닌 요소에 대해 공간을 할당합니다. 희소 행렬 생성 후에 채우고자 하는 0이 아닌 값에 대한 여유 공간을 할당하려면 이 구문을 사용하십시오.

예제

모두 축소

10,000×10,000 크기의 비희소 형식으로 저장된 단위 행렬을 만듭니다.

A = eye(10000); whosA
Name Size Bytes Class Attributes A 10000x10000 800000000 double

이 행렬은 800메가바이트의 메모리를 사용합니다.

행렬을 희소 형식으로 변환합니다.

S = sparse(A); whosS
Name Size Bytes Class Attributes S 10000x10000 240008 double sparse

희소 형식에서는 같은 행렬이 약 0.25메가바이트의 메모리를 사용합니다. 이 경우, 희소 단위 행렬을 직접 생성하는speye함수를 사용하여 비희소 저장을 완전히 방지할 수 있습니다.

S = sparse(10000,5000)
S = All zero sparse: 10000x5000

세 개의 값i,j,v에서 1500×1500 크기의 희소 행렬을 만듭니다.

i = [900 1000]; j = [900 1000]; v = [10 100]; S = sparse(i,j,v,1500,1500)
S = (900,900) 10 (1000,1000) 100

크기를max(i)×max(j)보다 크게 지정할 경우sparse함수는 0으로 이루어진 추가 행과 열로 출력값을 채웁니다.

size(S)
ans =1×21500 1500

0이 아닌 값이10개뿐이지만, 0이 아닌 값100개를 위한 공간이 할당된 희소 행렬을 만듭니다.

S = sparse(1:10,1:10,5,20,20,100); N = nnz(S)
N = 10
N_alloc = nzmax(S)
N_alloc = 100

spalloc함수는 0이 아닌 요소가없지만0이 아닌 요소에 대해 할당된 공간이 있는 희소 행렬을 간단히 만들 수 있는 방법입니다.

하나 이상의 루프를 사용하지 않으면 누적할 수 없는 값을 반복 첨자를 사용하여 단일 희소 행렬에 누적합니다.

데이터로 구성된 열 벡터와 첨자로 구성된 두 개의 열 벡터를 만듭니다.

i = [6 6 6 5 10 10 9 9]'; j = [1 1 1 2 3 3 10 10]'; v = [100 202 173 305 410 550 323 121]';

첨자와 값을 나란히 시각화합니다.

[i,j,v]
ans =8×36 1 100 6 1 202 6 1 173 5 2 305 10 3 410 10 3 550 9 10 323 9 10 121

sparse함수를 사용하여 동일한 첨자를 가진 값을 누적합니다.

S = sparse(i,j,v)
S = (6,1) 475 (5,2) 305 (10,3) 960 (9,10) 444

입력 인수

모두 축소

입력 행렬로, 비희소 행렬이나 희소 행렬로 지정됩니다.A가이미 희소 행렬이면sparse(A)A를 반환합니다.

데이터형:double|logical
복소수 지원 여부:

첨자 쌍으로, 스칼라, 벡터, 행렬 중 하나의 개별 인수로 지정됩니다.ij에서 서로 대응하는 요소는 출력값에서v값의 배치를 결정하는S(i,j)첨자 쌍을 지정합니다.ij는 동일한 데이터형이어야 합니다.ij중 하나가 벡터 또는 행렬인 경우, 다른 입력값은 스칼라이거나 동일한 개수의 요소를 갖는 벡터나 행렬일 수 있습니다. 이 경우,sparsei(:)j(:)을 첨자로 사용합니다.

ijv의 여러 요소에 대해 동일한 값을 갖는 경우sparse는 반복된 인덱스가 있는v의 값을 집계합니다. 집계 동작은v에 있는 값의 데이터형에 따라 달라집니다.

  • 논리값의 경우sparseany함수를 적용합니다.

  • double형 값의 경우sparsesum함수를 적용합니다.

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

값으로, 스칼라, 벡터, 행렬 중 하나로 지정됩니다.v가벡터나 행렬이면 입력 인수ij중 하나도 동일한 개수의 요소를 갖는 벡터나 행렬이어야 합니다.

v에서 0인 요소는 모두 무시되며, 이에 대응하는ij내의 첨자도 마찬가지로 무시됩니다. 그러나 출력값의 차원 크기mn을 지정하지 않으면sparse는 최댓값m = max(i)n = max(j)를 계산한 후v의 0 요소를 무시합니다.

데이터형:double|logical
복소수 지원 여부:

각 차원의 크기로, 정수 값으로 구성된 개별 인수로 지정됩니다.m(행 크기)을 지정할 경우n(열 크기)도 지정해야 합니다.

mn을 지정하지 않으면sparse는 디폴트 값m = max(i)n = max(j)를 사용합니다. 이러한 최댓값은v의 0을 제거하기 전에 계산됩니다.

데이터형:double

0이 아닌 요소에 저장 공간을 할당하는 것으로, 이러한 요소의 개수nz는 음이 아닌 정수로 지정되며 일반적으로max([numel(i), numel(j), numel(v), 1])보다 크거나 같아야 합니다. 그러나i,j,v의 크기에서nz에 값0을 지정하는 게 가능한 경우sparse는 대신 값을1로 설정합니다.

희소 행렬S에 대해nnz함수는 행렬에서 0이 아닌 요소의 개수를 반환하고nzmax함수는 0이 아닌 행렬 요소에 할당된 저장 공간의 크기를 반환합니다.nnz(S)nzmax(S)가다른 결과를 반환할 경우, 실제로 필요한 것보다 더 많은 저장 공간이 할당되었을 수 있습니다. 이런 이유로, 나중에 요소를 더 채울 것으로 예상되는 경우에만nz를 설정하십시오.

nz를 지정하지 않으면sparsemax([numel(i), numel(j), numel(v), 1])의 디폴트 값을 사용합니다.

데이터형:double

제한 사항

  • i,jm,n의 입력값이2^31-1보다 크거나(32비트 플랫폼의 경우)2^48-1보다 크면(64비트 플랫폼의 경우), 희소 행렬을 생성할 수 없습니다.

  • MATLAB®은 희소 행렬을 압축된 희소 열 형식으로 저장합니다. 자세한 내용은Sparse Matrices InMATLAB: Design and Implementation(저자: John R. Gilbert, Cleve Moler, Robert Schreiber)을 참조하십시오.

  • accumarray함수도sparse와 유사하게 누적 동작을 실행합니다.

    • accumarray는 n차원 첨자를 사용하여 데이터를 Bin으로 그룹화하는 반면,sparse는 2차원 첨자를 사용하여 데이터를 Bin으로 그룹화합니다.

    • accumarray는 동일한 첨자를 가진 요소를 출력값에 추가하는 기본 동작 외에, 필요할 경우 Bin에 함수를 적용할 수도 있습니다.sparse는 double형 값인 경우 출력값으로 동일한 첨자를 가진 요소에sum함수를 적용하거나, 논리값인 경우any함수를 적용합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨