Main Content

accumarray

벡터 요소 누적

설명

예제

B = accumarray(ind,data)ind에 지정된 그룹에 따라 벡터 data요소를 누적하여 데이터 그룹의 합을 구합니다. 각 그룹에 대해 합이 계산됩니다. ind의 값은 데이터가 속한 그룹을 정의하는 동시에 각 그룹의 합이 저장된 출력 배열 B에 대한 인덱스를 정의합니다.

그룹의 합을 순서대로 반환하려면 ind를 벡터로 지정하십시오. 그러면 인덱스가 i인 그룹에 대해 accumarray는 그룹의 합을 B(i)에 반환합니다. 예를 들어, ind = [1 1 2 2]'이고 data = [1 2 3 4]'이면 B = accumarray(ind,data)는 열 벡터 B = [3 7]'을 반환합니다.

그룹의 합을 다른 형태로 반환하려면 ind를 행렬로 지정하십시오. ind가 m×n 행렬인 경우 각 행은 그룹 할당과 출력 배열 B에 대한 n차원 인덱스를 나타냅니다. 예를 들어, ind[3 4] 형식의 두 행을 포함한다면 data에서 대응하는 요소의 합은 B의 (3,4) 요소에 저장됩니다.

인덱스가 ind에 없는 B의 요소는 기본적으로 0으로 채워집니다.

예제

B = accumarray(ind,data,sz)는 크기 sz까지 요소가 채워진 배열 B를 반환합니다. szind의 차원 길이와 일치하거나 초과하는 양의 정수로 구성된 벡터로 지정하십시오. 출력값의 여분의 추가 요소는 0으로 채워집니다. sz[]로 지정하면 ind의 인덱스에 의해 출력값의 크기가 결정됩니다.

예제

B = accumarray(ind,data,sz,fun)ind로 지정된 data의 각 그룹에 함수 fun을 적용합니다. @ 기호를 사용하여 fun을 지정해야 하며(예: @mean), 디폴트 @sum을 사용하려면 []로 지정해야 합니다.

예제

B = accumarray(ind,data,sz,fun,fillval)ind의 인덱스가 참조하지 않는 B의 모든 요소를 스칼라 값 fillval로 채웁니다. 디폴트 값인 0을 사용하려면 fillval[]로 지정하십시오.

예제

B = accumarray(ind,data,sz,fun,fillval,issparse)는 배열 B를 반환합니다. issparsetrue이거나 1이면 희소 배열을 반환하고, issparsefalse이거나 0이면 비희소 배열을 반환합니다. 출력 배열 B는 기본적으로 비희소 형식입니다.

예제

모두 축소

데이터 벡터와 이에 대응하여 그룹을 정의하는 벡터 ind를 만듭니다.

data = (1:6)'
data = 6×1

     1
     2
     3
     4
     5
     6

ind = [1 3 4 2 4 1]'
ind = 6×1

     1
     3
     4
     2
     4
     1

ind에 지정된 그룹별로 data의 값들을 합산합니다.

B = accumarray(ind,data)
B = 4×1

     7
     4
     2
     8

또는, 'sum'을 그룹 계산으로 지정하여 groupsummary 함수를 사용합니다.

B = groupsummary(data,ind,'sum')
B = 4×1

     7
     4
     2
     8

그룹 벡터를 만듭니다.

ind = [1 1 4 2 4 3]';

스칼라 확장을 숫자 1에 적용하여 ind에 정의된 각 그룹의 요소 개수를 셉니다.

B = accumarray(ind,1)
B = 4×1

     2
     1
     1
     2

또는, groupcounts 함수를 사용합니다.

B = groupcounts(ind)
B = 4×1

     2
     1
     1
     2

데이터 벡터를 만들고 데이터 그룹을 정의하는 출력 인덱스 행렬 ind를 만듭니다.

data = 1:6
data = 1×6

     1     2     3     4     5     6

ind = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1]
ind = 6×2

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

ind의 그룹마다 data의 값들을 합산합니다. ind의 인덱스는 출력값의 위치로 구성된 4×2 행렬을 정의합니다.

B1 = accumarray(ind,data)
B1 = 4×2

     5     0
     0     7
     0     3
     6     0

출력값 크기를 [4 4]로 지정하여 출력값을 4×4 행렬에 채웁니다.

B2 = accumarray(ind,data,[4 4])
B2 = 4×4

     5     0     0     0
     0     7     0     0
     0     3     0     0
     6     0     0     0

그룹별로 합 대신 분산을 계산합니다.

데이터 벡터를 만들고 데이터 그룹을 정의하는 행렬 ind를 만듭니다.

data = [100.1 101.2 103.4 102.8 100.9 101.5]'
data = 6×1

  100.1000
  101.2000
  103.4000
  102.8000
  100.9000
  101.5000

ind = [1 1; 1 1; 2 2; 3 2; 2 2; 3 2]
ind = 6×2

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

메서드 입력으로 함수 핸들 @var을 지정하여 각 그룹의 분산을 계산합니다. 이 구문은 sum 대신 var 함수를 그룹에 적용합니다.

B1 = accumarray(ind,data,[],@var)
B1 = 3×2

    0.6050         0
         0    3.1250
         0    0.8450

벡터 입력을 받아 스칼라를 반환하는 익명 함수로 그룹 계산을 지정할 수 있습니다. 이 방법은 함수에 추가로 인수를 전달하려는 경우 유용합니다. 예를 들어, 정규화 인수 값 1을 갖는 var 함수를 사용합니다.

A2 = accumarray(ind,data,[],@(x) var(x,1))
A2 = 3×2

    0.3025         0
         0    1.5625
         0    0.4225

메서드 입력값으로 익명 함수를 사용하여 sum 함수에 추가 인수를 지정합니다.

데이터 벡터를 만들고, 데이터 그룹 및 출력값에 대한 3차원 인덱스를 정의하는 행렬 ind를 만듭니다.

data = int8(10:15)
data = 1x6 int8 row vector

   10   11   12   13   14   15

ind = [1 1 1; 1 1 1; 1 1 2; 1 1 2; 2 3 1; 2 3 2]
ind = 6×3

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

sum 함수의 'native' 옵션을 사용하여 네이티브 정수 클래스 int8로 그룹별 데이터를 합산합니다. 이렇게 하려면 메서드 입력으로 @(x) sum(x,'native')를 사용하여 익명 함수를 지정하십시오. 결과는 int8형의 2×3×2 다차원 배열입니다.

B = accumarray(ind,data,[],@(x) sum(x,'native'))
B = 2x3x2 int8 array
B(:,:,1) =

   21    0    0
    0    0   14


B(:,:,2) =

   25    0    0
    0    0   15

데이터 벡터를 만들고 데이터 그룹을 정의하는 행렬 ind를 만듭니다.

data = 1:10
data = 1×10

     1     2     3     4     5     6     7     8     9    10

ind = [1 1; 1 1; 1 1; 1 1; 2 1; 2 1; 2 1; 2 1; 2 1; 2 2]
ind = 10×2

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

data의 요소를 셀형 배열로 그룹화합니다.

B = accumarray(ind,data,[],@(x) {x})
B=2×2 cell array
    {4x1 double}    {0x0 double}
    {5x1 double}    {[      10]}

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

B{2,1}
ans = 5×1

     5
     6
     7
     8
     9

데이터 벡터를 만들고 데이터 그룹을 정의하는 행렬 ind를 만듭니다.

data = (101:106)'
data = 6×1

   101
   102
   103
   104
   105
   106

ind = [1 1; 2 2; 3 3; 1 1; 2 2; 4 4]
ind = 6×2

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

ind의 요소는 출력값으로 4×4 행렬을 정의하지만 16개 요소 중 4개만 참조합니다. 기본적으로 출력값의 나머지 12개 요소는 0이 됩니다. 0 대신 NaN 값을 사용하여 추가 출력 요소를 채웁니다.

B = accumarray(ind,data,[],[],NaN)
B = 4×4

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

데이터 벡터를 만들고 데이터 그룹을 정의하는 행렬 ind를 만듭니다.

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

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

ind의 요소는 출력값으로 400×400 행렬을 정의하지만 160,000개 요소 중 3개만 참조합니다. accumarray의 출력값으로 0이 아닌 요소가 있는 큰 저밀도 배열이 생성되는 경우 issparse 옵션을 true로 지정하여 비희소 행렬 대신 희소 행렬을 만들면 메모리를 절약할 수 있습니다.

B = accumarray(ind,data,[],[],[],true)
B = 
   (1,1)      125
  (80,80)     118
 (400,400)    152

입력 인수

모두 축소

출력 인덱스로, 벡터, 행렬 또는 벡터로 구성된 셀형 배열로 지정됩니다.

  • ind가 벡터이면 각 요소는 출력값에 대한 인덱스를 지정하고 accumarray에서 누적한 그룹을 정의합니다. 모든 요소는 양의 정수여야 하고 ind의 길이는 데이터 벡터의 길이와 같아야 합니다.

  • ind가 m×n 행렬이면 각 행은 출력값에 대한 n차원 인덱스를 지정합니다. ind의 i번째 행은 데이터의 i번째 값에 대응하고 ind의 행 개수는 데이터 벡터 길이와 일치해야 합니다. 예를 들어, ind가 3×2 행렬인 경우 3개의 2차원 인덱스를 포함합니다. 각 행의 첫 번째 요소는 출력값에 대한 행 인덱스이고 두 번째 요소는 열 인덱스입니다.

  • ind가 인덱스 벡터로 구성된 셀형 배열인 경우 각 벡터는 길이가 동일해야 하며 열로 취급됩니다.

누적될 데이터로, 스칼라 또는 벡터로 지정됩니다.

  • data가 스칼라인 경우 그 값은 스칼라 확장이 이루어집니다.

  • data가 벡터인 경우 벡터 길이는 인덱스 배열의 행 개수와 동일해야 합니다.

출력 배열의 크기로, 양의 정수로 구성된 벡터로 지정되거나 []로 지정됩니다. 예를 들어, sz = [5 7]이면 5×7인 출력 배열이 생성됩니다. 크기에 대해 []을 지정할 경우 인덱스 배열의 값이 출력 배열의 크기를 결정합니다. sz의 차원 길이는 인덱스 배열의 차원 길이와 동일하거나 이를 초과해야 합니다.

그룹 계산으로, 함수 핸들로 지정됩니다. accumarray는 그룹별로 데이터 벡터의 요소를 누적한 다음 fun 함수를 그룹 요소에 적용합니다. fun = []을 지정하면 디폴트 함수 sum을 사용하여 계산합니다. 지정된 함수는 열 벡터를 받아 숫자형 스칼라, logical형 스칼라, char형 스칼라 또는 스칼라 cell형을 반환해야 합니다. 함수 핸들에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

예: fun = @max

출력값의 요소가 인덱스 배열에 제공된 인덱스와 일치하지 않는 경우의 채우기 값으로, 스칼라로 지정되거나 디폴트 값 0을 사용하는 []로 지정됩니다. fillval의 데이터형은 계산 함수의 출력값 데이터형과 일치해야 합니다.

출력값 희소성으로, 숫자형 또는 논리값 1(true) 또는 0(false)으로 지정됩니다.

issparsetrue 또는 1인 경우 채우기 값은 0 또는 []이어야 하고 입력 데이터와 계산 함수의 출력값은 모두 double형이어야 합니다.

출력 인수

모두 축소

출력 배열로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. B는 그룹 계산 함수에서 반환되는 값과 동일한 데이터형을 갖습니다.

B의 크기가 지정되지 않은 경우 출력값의 크기는 인덱스 배열 ind에 따라 결정됩니다.

  • ind가 열 벡터인 경우 Bmax(ind,[],1) 길이의 열 벡터입니다.

  • ind가 두 개 이상의 열로 구성된 행렬인 경우 Bmax(ind,[],1) 크기의 다차원 배열입니다.

세부 정보

모두 축소

요소 누적

다음 그림은 12개월 동안 측정한 온도 데이터의 벡터에 대한 accumarray의 동작을 설명합니다. 월별 최고 온도 측정값을 찾기 위해 accumarraymonth에서의 인덱스가 같은 temperature 값들로 구성된 각 그룹에 max 함수를 적용합니다.

month의 어떤 값도 출력값의 5, 6, 7, 10 위치를 가리키지 않습니다. 기본적으로 그러한 인덱스에 있는 출력값 maxTemp의 요소는 0입니다.

Behavior of accumarray using the max function on vectors of month indices and temperature data. The output maxTemp contains the maximum temperature for each unique month

  • accumarray의 동작은 그룹별로 요약 통계량을 계산하고 그룹의 요소 개수를 센다는 점에서 각각 groupsummary 함수 및 groupcounts 함수와 비슷합니다. MATLAB®의 그룹화 기능에 대한 자세한 내용은 데이터 전처리 항목을 참조하십시오.

  • accumarrayhistcounts 함수와도 유사하게 동작합니다.

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

    • histcounts는 Bin 도수와 Bin 배치만 반환할 수 있습니다. accumarray는 데이터에 어떤 함수든 적용할 수 있습니다.

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

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

    • accumarray는 n차원 인덱스를 사용하여 데이터를 그룹화하는 반면, sparse는 2차원 인덱스를 사용하여 데이터를 그룹화합니다.

    • 인덱스가 동일한 요소들에 대해 sparsesum 함수(double형 값의 경우) 또는 any 함수(logical형 값의 경우)를 적용하고 스칼라 결과를 출력 행렬로 반환합니다. accumarray는 기본적으로 합을 계산하지만, 임의의 함수를 데이터에 적용할 수 있습니다.

확장 기능

버전 내역

R2006a 이전에 개발됨