accumarray

Накопите векторные элементы

Описание

пример

B = accumarray(ind,data) группы сумм данных путем накопления элементов векторного data по данным групп, заданных в ind. Сумма затем вычисляется по каждой группе. Значения в ind задайте и группу, данные принадлежат и индекс в выходной массив B где каждая сумма группы хранится.

Чтобы возвратить суммы группы в порядке, задайте ind как вектор. Затем для группы с индексом iaccumarray возвращает его сумму в B(i). Например, если ind = [1 1 2 2]' и data = [1 2 3 4]', затем B = accumarray(ind,data) возвращает вектор-столбец B = [3 7]'.

Чтобы возвратить суммы группы в другой форме, задайте ind как матрица. Для m-by-n матричный ind, каждая строка представляет присвоение группы и n - размерный индекс в выход B. Например, если ind содержит две строки формы [3 4], затем сумма соответствующих элементов в data хранится в (3,4) элемент B.

Элементы B чей индекс не появляется в ind заполнены 0 по умолчанию.

пример

B = accumarray(ind,data,sz) возвращает массив B дополненный, чтобы измерить sz. Задайте sz как вектор из положительных целых чисел, которые совпадают или превышают длины размерности в ind. Дополнительные элементы в выходе заполнены 0. Задайте sz как [] позволять индексам в ind определите размер выхода.

пример

B = accumarray(ind,data,sz,fun) применяет функциональный fun каждой группе в data заданный ind. Задайте fun использование @ символ, такой как @mean, или как [] использовать @sum по умолчанию.

пример

B = accumarray(ind,data,sz,fun,fillval) заливки все элементы B это не упомянуто индексом в ind со скалярным значением fillval. Задайте fillval как [] использовать значение по умолчанию 0.

пример

B = accumarray(ind,data,sz,fun,fillval,issparse) возвращает массив B это разреженно когда issparse true или 1, и полный, если issparse false или 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

Суммируйте значения в data группами, заданными в ind.

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

     7
     4
     2
     8

В качестве альтернативы используйте groupsummary функция, задавая 'sum' как расчет группы.

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

Суммируйте значения в data для каждой группы в ind. Индексы в 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 когда метод вводится. Этот синтаксис применяет var функционируйте группам вместо sum.

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

    0.6050         0
         0    3.1250
         0    0.8450

Можно задать расчет группы как анонимную функцию, которая признает, что вектор вводит и возвращает скаляр. Это полезно, когда это необходимо, чтобы передать дополнительные аргументы функции. Например, используйте var функция со значением аргумента нормализации 1.

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

    0.3025         0
         0    1.5625
         0    0.4225

Задайте дополнительный аргумент к sum функция при помощи анонимной функции для метода вводится.

Создайте вектор из данных и матричного ind это задает группы данных и 3-D индексов в выход.

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

Суммируйте данные группой в их нативном целочисленном классе int8 при помощи 'native' опция для sum функция. Для этого задайте анонимную функцию с помощью @(x) sum(x,'native') для входа метода. Результатом являются 2 3 2 многомерными массивами типа int8.

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 для выхода, но только ссылку 4 из этих 16 элементов. По умолчанию другими 12 элементами является 0 в выходе. Заполните дополнительные выходные элементы с NaN значения вместо 0.

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 матрица для выхода, но только ссылка 3 из этих 160 000 элементов. Когда выход accumarray результаты в большом массиве с низкой плотностью ненулевых элементов, можно сохранить память путем определения issparse опция как true, создание разреженной матрицы вместо полной.

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

Входные параметры

свернуть все

Выведите индексы в виде вектора, матрицы или массива ячеек векторов.

  • Если ind вектор, затем каждый элемент задает индекс в выход и задает группы, накопленные accumarray. Всеми элементами должны быть положительные целые числа и длина ind должен совпадать с длиной вектора данных.

  • Если ind m-by-n матрица, затем каждая строка задает n - размерный индекс в выход. i th строка в ind соответствует i th значение в данных и количестве строк в ind должен совпадать с длиной вектора данных. Например, если ind 3-на-2 матрица, она содержит три 2D индекса. Первым элементом каждой строки является индекс строки в выход, и вторым элементом является индекс столбца.

  • Если ind массив ячеек векторов индекса, затем каждый вектор должен иметь ту же длину, и они обработаны как столбцы.

Данные, которые будут накоплены в виде скаляра или вектора.

  • Если data скаляр, затем его значение является расширенным скаляром.

  • Если data вектор, затем он должен иметь ту же длину как количество строк в массиве индекса.

Размер выходного массива в виде вектора из положительных целых чисел или как []. Например, sz = [5 7] производит выходной массив, который является 5 7. Когда вы задаете [] для размера значения в массиве индекса определяют размер выхода. Длины размерности в sz должен совпадать или превысить длины размерности в массиве индекса.

Расчет группы в виде указателя на функцию. accumarray накапливает элементы вектора данных группой, и затем применяет функциональный fun к элементам группы. Когда вы задаете fun = [], расчет использует функциональный sum по умолчанию. Заданная функция должна принять вектор-столбец и возвратить числовое, logical, или char скаляр или скалярный cell. Для получения дополнительной информации об указателях на функцию см. Создание указателя на функцию.

Пример: fun = @max

Заполните значение, когда элемент выхода не будет соответствовать индексу, обеспеченному в массиве индекса в виде скаляра или как [], который использует значение по умолчанию 0. Тип данных fillval должен совпадать с типом данных функции расчета выход.

Выведите разреженность в виде числового или логического 1 TRUE) или 0 ложь).

Когда issparse true или 1, значением заливки должен быть 0 или [], и входные данные и выход функции расчета должны оба иметь, вводят double.

Выходные аргументы

свернуть все

Выходной массив, возвращенный как вектор, матрица или многомерный массив. B имеет совпадающий тип данных как значения, возвращенные функцией расчета группы.

Когда размер B не задан, выходной размер зависит от массива индекса ind.

  • Если ind вектор-столбец, затем B вектор-столбец длины max(ind,[],1).

  • Если ind матрица больше чем с одним столбцом, затем B многомерный массив размера max(ind,[],1).

Больше о

свернуть все

Накопление элементов

Следующая диаграмма иллюстрирует поведение accumarray на векторе из температурных данных, принятых 12-месячный период. Найти максимальную температуру, читающую в течение каждого месяца, accumarray применяет max функционируйте каждой группе значений в temperature это имеет идентичные индексы в month.

Никакие значения в month укажите на 5, 6, 7, или 10 положений выхода. Этими элементами является 0 в выходе по умолчанию.

Советы

  • Поведение accumarray похоже на функции groupsummary и groupcounts для вычислительной итоговой статистики группой и подсчетом числа элементов в группе, соответственно. Для большей группирующейся функциональности в MATLAB® смотрите Данные о Предварительной обработке.

  • Поведение accumarray также похоже на тот из histcounts функция.

    • histcounts группы непрерывные значения в 1D область значений с помощью границ интервала. accumarray данные групп с помощью n - размерные индексы.

    • histcounts может только возвратить размещение интервала и количество интервалов. accumarray может применить любую функцию к данным.

    Можно подражать поведению histcounts использование accumarray с data = 1.

  • sparse функция также имеет поведение накопления, похожее на тот из accumarray.

    • sparse данные групп с помощью 2D индексов, тогда как accumarray данные групп с помощью n - размерные индексы.

    • Для элементов с идентичными индексами, sparse применяется sum функция (для double значения) или any функция (для logical значения), и возвращает скалярный результат в выходную матрицу. accumarray суммы по умолчанию, но может применить любую функцию к данным.

Расширенные возможности

Смотрите также

| | |

Представлено до R2006a