이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

accumarray

누적(Accumulation)을 사용한 배열 생성

구문

A = accumarray(subs,val)
A = accumarray(subs,val,sz)
A = accumarray(subs,val,sz,fun)
A = accumarray(subs,val,sz,fun,fillval)
A = accumarray(subs,val,sz,fun,fillval,issparse)

설명

예제

A = accumarray(subs,val)은 첨자 subs를 사용하여 벡터 val요소를 누적하는 방법으로 배열 A를 반환합니다. subs가 열 벡터인 경우, 이 벡터 내의 각 요소는 출력값 내의 대응하는 첨자를 정의하는데 이 출력값 역시 열 벡터입니다. accumarray 함수는 subs에 동일한 첨자를 갖는, val의 모든 요소를 수집하고, 이 첨자에 대응하는 A의 위치에 요소들의 합을 저장합니다. (인덱스 i의 경우, A(i)=sum(val(subs(:)==i))) 첨자가 subs에 나타나지 않는, A의 요소는 0과 같습니다.

subsmxn 행렬인 경우 각 행은 출력 행렬 An차원 첨자를 나타냅니다. subs의 i번째 행은 벡터 val에서 i번째 요소에 해당합니다.

예제

A = accumarray(subs,val,sz)A를 반환합니다. 이때 배열의 크기는 sz입니다. sz를 양의 정수 벡터로 지정하여 출력값의 크기를 정의하거나, []로 지정하여 subs 첨자로 출력값의 크기가 결정되도록 할 수 있습니다. subs가 출력값에 포함될 후행 행이나 열, 차원을 참조하지 않을 경우 sz를 사용하십시오.

예제

A = accumarray(subs,val,sz,fun)subs가 가리키는 첨자에 해당하는 val 요소의 각 서브셋에 fun 함수를 적용합니다. @ 기호를 사용하여 fun을 지정하거나(예: @mean), @sum 디폴트 함수를 사용하려면 []로 지정해야 합니다.

예제

A = accumarray(subs,val,sz,fun,fillval)subs의 첨자가 참조하지 않는 A의 모든 요소를 스칼라 값 fillval로 채웁니다. fillval 입력값은 fun에서 반환되는 값과 클래스가 동일해야 합니다. 디폴트 값인 0을 사용하려면 fillval[]로 지정해야 합니다.

예제

A = accumarray(subs,val,sz,fun,fillval,issparse)는 배열 A를 반환합니다. 스칼라 issparsetrue이거나 1이면 희소 배열(Sparse Array)을 반환하고, issparsefalse이거나 0이면 비희소 배열을 반환합니다. 출력 배열 A는 기본적으로 풀 배열(Full Array)입니다.

예제

모두 축소

첨자 벡터 subs를 만듭니다.

subs = [1; 2; 4; 2; 4]
subs = 5×1

     1
     2
     4
     2
     4

val = 1을 갖는 accumarray를 사용하여 subs의 동일한 첨자 개수를 셀 수 있습니다.

A = accumarray(subs,1)
A = 4×1

     1
     2
     0
     2

결과는 Bin 도수로 구성된 벡터가 됩니다. histcounts(subs,'BinMethod','integers')를 사용해도 동일한 답을 구할 수 있습니다. accumarray는 더 높은 차원의 그리드에 대해서도 Bin 도수를 계산할 수 있습니다.

데이터 벡터 val과 동일한 길이를 가진 첨자 값 벡터 subs를 만듭니다.

val = 101:105';
subs = [1; 3; 4; 3; 4]
subs = 5×1

     1
     3
     4
     3
     4

accumarray를 사용하여 subs가 가리키는 첨자에 해당하는 val의 값을 더합니다.

A = accumarray(subs,val)
A = 4×1

   101
     0
   206
   208

결과는 값을 누적한 벡터가 됩니다. subs의 두 번째 및 네 번째 요소가 3이므로 A(3)val의 두 번째 및 네 번째 요소를 더한 값입니다. 즉, A(3) = 102 + 104 = 206이 됩니다. 또한 subs에 값이 2인 요소가 포함되어 있지 않으므로 A(2) = 0입니다. subs가 벡터이므로 출력값 A 또한 벡터가 됩니다. A의 길이는 max(subs,[],1)입니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = 101:106';
subs = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1]
subs = 6×2

     1     1
     2     2
     3     2
     1     1
     2     2
     4     1

subs의 첨자는 출력값으로 4x2 행렬을 정의합니다.

accumarray를 사용하여 subs가 가리키는 첨자에 해당하는 val의 값을 더합니다.

A = accumarray(subs,val)
A = 4×2

   205     0
     0   207
     0   103
   106     0

결과는 누적된 값을 갖는 4x2 행렬입니다.

accumarraysz 입력값을 사용하여 4x4 행렬을 반환합니다. 각 차원의 크기를 디폴트 크기보다 크거나 같도록 지정할 수 있지만 더 작게 지정할 수는 없습니다. 이 예에서 디폴트 크기는 4x2입니다.

A = accumarray(subs,val,[4 4])
A = 4×4

   205     0     0     0
     0   207     0     0
     0   103     0     0
   106     0     0     0

결과는 누적된 값을 갖는 4x4 행렬입니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = [100.1 101.2 103.4 102.8 100.9 101.5]';
subs = [1 1; 1 1; 2 2; 3 2; 2 2; 3 2]
subs = 6×2

     1     1
     1     1
     2     2
     3     2
     2     2
     3     2

subs의 첨자는 출력값으로 3x2 행렬을 정의합니다.

accumarrayfun 입력값을 사용하여 subs가 가리키는 첨자에 해당하는 val 데이터 그룹의 분산을 계산합니다. fun@var로 지정합니다.

A1 = accumarray(subs,val,[],@var)
A1 = 3×2

    0.6050         0
         0    3.1250
         0    0.8450

결과는 분산 값을 갖는 3x2 행렬입니다.

또는 벡터 입력을 받아 스칼라를 반환하는 경우에 한해 fun을 익명 함수로 지정할 수 있습니다. 주로 이 방법은 함수에 추가로 파라미터를 전달하려는 경우 유용하게 사용됩니다. 이때 var 함수는 정규화 파라미터와 함께 사용합니다.

A2 = accumarray(subs,val,[],@(x) var(x,1))
A2 = 3×2

    0.3025         0
         0    1.5625
         0    0.4225

결과는 정규화된 분산 값을 포함하는 3x2 행렬입니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = int8(10:15);
subs = [1 1 1; 1 1 1; 1 1 2; 1 1 2; 2 3 1; 2 3 2]
subs = 6×3

     1     1     1
     1     1     1
     1     1     2
     1     1     2
     2     3     1
     2     3     2

subs의 첨자는 출력값으로 2x3x2 다차원 배열을 정의합니다.

accumarray를 사용하여 subs가 가리키는 첨자에 해당하는 val의 데이터 값들을 더합니다. 함수 핸들을 사용하여 네이티브인 int8 정수 클래스로 합계 값을 구할 수 있습니다. sum 함수의 'native' 옵션을 사용합니다.

A = accumarray(subs,val,[],@(x) sum(x,'native'))
A = 2x3x2 int8 array
A(:,:,1) =

   21    0    0
    0    0   14


A(:,:,2) =

   25    0    0
    0    0   15

결과는 int8 클래스의 2x3x2 다차원 배열입니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = 1:10;
subs = [1 1;1 1;1 1;1 1;2 1;2 1;2 1;2 1;2 1;2 2]
subs = 10×2

     1     1
     1     1
     1     1
     1     1
     2     1
     2     1
     2     1
     2     1
     2     1
     2     2

subs의 첨자는 출력값으로 2x2 행렬을 정의합니다.

accumarray를 사용하여 val의 요소를 셀형 배열로 그룹화합니다.

A = accumarray(subs,val,[],@(x) {x})
A = 2x2 cell array
    {4x1 double}    {0x0 double}
    {5x1 double}    {[      10]}

결과는 2x2 셀형 배열입니다.

벡터 요소가 val에 표시되는 순서와 동일한지 확인합니다.

A{2,1}
ans = 5×1

     5
     6
     7
     8
     9

subs의 첨자는 정렬되어 있으므로 셀형 배열에서 숫자형 벡터의 요소는 val에 표시되는 순서와 동일합니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = 1:5;
subs = [1 2; 1 1; 1 2; 1 1; 2 3]
subs =

     1     2
     1     1
     1     2
     1     1
     2     3

subs에서 첨자는 출력값으로 2x3 행렬을 정의하지만 출력값 A의 선형 인덱스에 따라 정렬되어 있지 않습니다.

fun = @(x) {x}를 지정하여 val의 값을 셀형 배열로 그룹화합니다.

A = accumarray(subs,val,[],@(x) {x})
A =

  2×3 cell array

    [2×1 double]    [2×1 double]     []
              []              []    [5]

결과는 2x3 셀형 배열입니다.

A{1,2}의 벡터를 검토합니다.

A{1,2}
ans =

     3
     1

A{1,2} 벡터의 요소는 val과 순서가 다릅니다. 벡터의 첫 번째 요소는 1이 아닌 3입니다. subs의 첨자가 선형 인덱스에 따라 정렬되어 있지 않은 경우 accumarrayfunval의 데이터를 전달할 때 순서가 유지되지 않을 수도 있습니다. 드물지만 fun 입력값의 순서가 val에 표시되는 순서와 동일해야 할 경우 출력값의 선형 인덱스에 따라 subs의 인덱스를 정렬합니다.

이 경우에는 sortrows 함수를 두 개의 입력값 및 두 개의 출력값과 함께 사용하여 subsval을 출력값의 선형 인덱스에 따라 동시에 재정렬하십시오.

[S,I] = sortrows(subs,[2,1]);
A = accumarray(S,val(I),[],@(x) {x});
A{1,2}
ans =

     1
     3

이제 A{1,2} 벡터의 요소는 정렬된 순서로 표시됩니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = 101:106';
subs = [1 1; 2 2; 3 3; 1 1; 2 2; 4 4]
subs = 6×2

     1     1
     2     2
     3     3
     1     1
     2     2
     4     4

subs의 첨자는 출력값으로 4x4 행렬을 정의하지만 16개 요소 중 4개만 참조합니다. 기본적으로 출력값의 나머지 12개 요소는 0이 됩니다.

accumarrayfillval 입력값을 사용하여 NaN 값으로 나머지 출력 요소를 채웁니다.

A = accumarray(subs,val,[],[],NaN)
A = 4×4

   205   NaN   NaN   NaN
   NaN   207   NaN   NaN
   NaN   NaN   103   NaN
   NaN   NaN   NaN   106

결과는 NaN 값으로 채워진 4x4 행렬입니다.

데이터 벡터 val과 첨자 행렬 subs를 만듭니다.

val = [34 22 19 85 53 77 99 6];
subs = [1 1; 400 400; 80 80; 1 1; 400 400; 400 400; 80 80; 1 1]
subs = 8×2

     1     1
   400   400
    80    80
     1     1
   400   400
   400   400
    80    80
     1     1

subs의 첨자는 출력값으로 400x400 행렬을 정의하지만 160,000개 요소 중 3개만 참조합니다. accumarray를 사용한 연산의 결과가 0이 아닌 요소로 이루어진 저밀도 배열이 될 경우 출력값을 희소 행렬로 저장하여 저장 공간을 절약할 수 있습니다.

accumarrayissparse 입력값을 사용하여 희소 행렬을 반환합니다.

A = accumarray(subs,val,[],[],[],true)
A = 
   (1,1)      125
  (80,80)     118
 (400,400)    152

결과는 희소 행렬입니다. sparse(subs(:,1),subs(:,2),val)을 사용해도 동일한 답을 구할 수 있습니다.

입력 인수

모두 축소

첨자 행렬로, 인덱스 벡터, 인덱스 행렬, 인덱스 벡터의 셀형 배열 중 하나로 지정됩니다. 인덱스는 다음의 경우일 때 양의 정수여야 합니다.

  • mxn subs 행렬에서 각 행의 값은 출력값 A에 n차원 인덱스를 지정합니다. 예를 들어, subs가 3x2 행렬인 경우 3개의 2차원 첨자를 포함합니다. subs는 또한 인덱스 열 벡터가 될 수 있으며, 이때 출력값 A도 열 벡터가 됩니다.

  • subs의 i번째 행은 val에서 i번째 데이터 값에 해당합니다.

  • subs가 비어 있으면 accumarray 함수가 오류를 발생시킵니다.

따라서 subs는 그룹화할 val의 데이터를 결정하고 출력값의 대상을 결정합니다. subs 인덱스 벡터가 셀형 배열 형태일 때, 각 벡터는 길이가 동일해야 하며 함수는 벡터를 첨자 행렬의 열로 취급합니다.

데이터로, 다음 조건의 벡터 또는 스칼라로 지정됩니다.

  • val이 벡터인 경우 길이가 subs의 행 개수와 동일해야 합니다.

  • val이 스칼라인 경우 스칼라 확장입니다.

두 경우 모두 subs의 각 행 첨자와 val의 데이터 값 간 일대일 쌍이 존재합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
복소수 지원 여부:

출력 배열의 크기로, 양의 정수로 구성된 벡터로 지정되거나 [](디폴트 값)로 지정됩니다. 디폴트 크기인 []를 지정할 경우 출력 배열 A의 크기는 subs의 값에 의해 결정됩니다.

sz를 양의 정수로 구성된 벡터로 지정할 경우 다음과 같은 속성을 충족해야 합니다.

  • subsn > 1개 열로 구성된 비어 있지 않은 mxn 행렬인 경우 sz에는 n개의 요소가 있어야 하며 논리 테스트 all(sz >= max(subs,[],1))을 통과해야 합니다.

  • subs가 비어 있지 않은 열 벡터인 경우 sz[m 1]이어야 합니다. 여기서 m >= max(subs)입니다.

예: sz = [3 3]

함수로, 함수 핸들 또는 [](디폴트 값)로 지정됩니다. 디폴트 함수는 @sum입니다. fun 함수는 열 벡터를 받아 숫자형 스칼라, logical형 스칼라, char형 스칼라, 스칼라 cell 중 하나를 반환해야 합니다. subs의 첨자가 선형 인덱스에 따라 정렬되어 있지 않은 경우 fun은 입력 데이터 값 순서를 따르지 않습니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

예: fun = @max

데이터형: function_handle

채우기 값으로, 스칼라 또는 [](디폴트 값)로 지정됩니다. fillval의 디폴트 값은 0입니다. subs가 출력값의 각 요소를 참조하지 않을 경우 accumarrayfillval에 지정된 값으로 출력값을 채웁니다. fillval의 클래스는 fun에서 반환되는 값과 동일해야 합니다.

출력값 희소성으로, 숫자형 또는 논리값 1(true) 또는 0(false)으로 지정됩니다. 희소 배열을 출력하려면 true 또는 1을 지정해야 합니다. issparsetrue 또는 1인 경우

  • fillval0 또는 []여야 합니다.

  • val의 값과 fun의 출력값은 모두 double형이어야 합니다.

출력 인수

모두 축소

벡터, 행렬, 다차원 배열 중 하나로 반환되는 출력 배열입니다. Afun에서 반환되는 값과 동일한 클래스를 갖습니다.

sz가 지정되지 않은 경우 A의 크기는 다음과 같이 subs 입력값에 따라 결정됩니다.

  • subsn > 1개 열로 구성된 비어 있지 않은 행렬인 경우 Amax(subs,[],1) 크기의 n차원 배열입니다.

  • subsn > 1개 열로 구성된 빈 행렬인 경우 A는 0x0x...x0 크기의 n차원의 빈 배열입니다.

  • subs가 비어 있지 않은 열 벡터인 경우 Amax(subs,[],1) 길이의 열 벡터입니다. subs가 비어 있을 경우 A 의 길이는 0입니다.

세부 정보

모두 축소

요소 누적

다음 그림은 12개월의 기간 동안 측정한 온도 데이터의 벡터에 대한 accumarray의 동작을 설명합니다. 월별 최고 온도를 찾기 위해 accumarraymonth가 가리키는 첨자에 해당하는 각 temperature 값 그룹에 max 함수를 적용합니다.

출력값에는 month의 5, 6, 7, 10 위치에 해당하는 값이 없습니다. 출력값에서 이 요소들은 기본적으로 0이 되지만 fillval을 사용하여 지정한 값으로 채울 수 있습니다.

  • accumarrayhistcounts 함수와 유사하게 동작합니다. 두 함수 모두 데이터를 Bin으로 그룹화합니다.

    • histcounts는 Bin 경계값을 사용하여 연속된 값을 1차원 범위로 그룹화합니다. accumarray는 n차원 첨자를 사용하여 데이터를 그룹화합니다.

    • histcounts는 Bin 도수 및/또는 Bin 배치를 반환합니다. accumarray는 비닝(Binning)된 데이터에 어떤 함수든 적용할 수 있습니다.

    accumarray에서 val = 1을 사용하여 histcounts의 동작을 모방할 수 있습니다.

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

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

    • 동일한 첨자를 갖는 요소의 경우 sparse는 이러한 요소의 합을 출력값에 할당합니다. accumarray도 기본적으로 동일하게 동작하지만, 선택적으로 임의의 함수를 Bin에 적용할 수 있습니다.

확장 기능

참고 항목

| | |

R2006a 이전에 개발됨