accumarray

Создайте массив с накоплением

Описание

пример

A = accumarray(subs,val) возвращает массив A путем накопления элементов векторного val использование индексов subs. Если subs вектор-столбец, затем каждый элемент задает соответствующий индекс в выходе, который является также вектор-столбцом. accumarray функция собирает все элементы val это имеет идентичные индексы в subs и хранит их сумму в месте A соответствие тому индексу (для индекса i, A(i)=sum(val(subs(:)==i))). Элементы A чьи индексы не появляются в subs равны 0.

Для m- n матричный subs, каждая строка представляет n- размерный индекс в выход A. ith строка subs соответствует ith элементу в векторном val.

пример

A = accumarray(subs,val,sz) возвращает массив, A, с размером sz. Задайте sz как вектор из положительных целых чисел, чтобы задать размер выхода, или как [] позволять индексам в subs определите размер выхода. Используйте sz когда subs не ссылается на запаздывание строк, столбцов или размерностей, что требуется присутствовать в выходе.

пример

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

пример

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

пример

A = accumarray(subs,val,sz,fun,fillval,issparse) возвращает массив, A, это разреженно если скалярный issparse true или 1, и полный, если issparse false или 0. Выход, A, полно по умолчанию.

Примеры

свернуть все

Создайте вектор из индексов, subs.

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

     1
     2
     4
     2
     4

Используйте accumarray с val = 1 считать количество идентичных индексов в subs.

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

     1
     2
     0
     2

Результатом является вектор из количества интервалов. Можно получить тот же ответ с histcounts(subs,'BinMethod','integers'). Однако accumarray также может вычислить количество интервалов по более высоким размерным сеткам.

Создайте вектор из данных, val, и вектор из значений индекса с той же длиной, subs.

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

     1
     3
     4
     3
     4

Используйте accumarray суммировать значения в val это имеет идентичные индексы в subs.

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

   101
     0
   206
   208

Результатом является вектор из накопленных значений. Начиная со вторых и четвертых элементов subs равны 3, A(3) сумма вторых и четвертых элементов val, то есть, A(3) = 102 + 104 = 206. Кроме того, A(2) = 0 потому что subs не содержит значение 2. Начиная с 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 задайте 4 2 матрица для выхода.

Используйте accumarray суммировать значения в val это имеет идентичные индексы в subs.

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

   205     0
     0   207
     0   103
   106     0

Результат 4 2 матрица накопленных значений.

Используйте sz вход accumarray возвратить матрицу 4 на 4. Можно задать размер с каждой размерностью, равной или больше, чем размер по умолчанию, в этом случае 4 2, но не меньшие.

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

Результатом является матрица 4 на 4 накопленных значений.

Создайте вектор из данных, 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 задайте 3-на-2 матрицу для выхода.

Используйте fun вход accumarray вычислить отклонения в группе данных в val это имеет идентичные индексы в subs. Задайте fun как @var.

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

    0.6050         0
         0    3.1250
         0    0.8450

Результатом является 3-на-2 матрица значений отклонения.

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

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

    0.3025         0
         0    1.5625
         0    0.4225

Результатом является 3-на-2 матрица нормированных значений отклонения.

Создайте вектор из данных, 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 задайте 2 3 2 многомерными массивами для выхода.

Используйте accumarray суммировать значения данных в val это имеет идентичные индексы в subs. Можно использовать указатель на функцию, чтобы суммировать значения в их собственном компоненте, int8, целочисленный класс при помощи 'native' опция sum функция.

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

Результатом являются 2 3 2 многомерными массивами класса int8.

Создайте вектор из данных 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 задайте матрицу 2 на 2 для выхода.

Используйте accumarray сгруппировать элементы val в массив ячеек.

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

Результатом является массив ячеек 2 на 2.

Проверьте, что векторные элементы находятся в том же порядке, как они появляются в val.

A{2,1}
ans = 5×1

     5
     6
     7
     8
     9

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

Используйте fillval вход accumarray заполнить дополнительные выходные элементы со значениями 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

Результатом является матрица 4 на 4, дополненная значениями NaN.

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

Используйте issparse вход accumarray возвратить разреженную матрицу.

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

Результатом является разреженная матрица. Можно получить тот же ответ с sparse(subs(:,1),subs(:,2),val).

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

свернуть все

Матрица индекса в виде вектора из индексов, матрица индексов или массив ячеек векторов индекса. Индексы должны быть положительными целыми числами:

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

  • ith строка в subs соответствует ith значению данных в val.

  • Если subs пусто по крайней мере с одним столбцом, затем никакие данные не накапливаются. В этом случае выход также пуст, и выходной тип диктует fillval.

Таким образом, subs определяет который данные в val сгруппироваться, а также его конечный пункт назначения в выходе. Если subs массив ячеек векторов индекса, каждый вектор должен иметь ту же длину, и функция обрабатывает векторы как столбцы матрицы индекса.

Данные в виде вектора или скаляра:

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

  • Если val скаляр, это - расширенный скаляр.

В обоих случаях непосредственное соединение присутствует между индексами в каждой строке subs и значения данных в val.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
Поддержка комплексного числа: Да

Размер выходного массива в виде вектора из положительных целых чисел или [] (значение по умолчанию). Когда вы задаете [] для размера по умолчанию, значений в subs определите размер выходного массива, A.

Когда вы задаете sz как вектор из положительных целых чисел, это должно удовлетворить этим свойствам:

  • Если subs m- n матрица с n > 1 столбцы, затем sz должен иметь n элементы и проходят логический тест all(sz >= max(subs,[],1)).

  • Если subs вектор-столбец, затем sz должен быть [m 1] где m >= max(subs).

Пример: sz = [3 3]

Функция в виде указателя на функцию или [] (значение по умолчанию). Функцией по умолчанию является @sum. fun функция должна принять вектор-столбец и возвратить числовое, logical, или char скаляр или скалярный cell. Для получения дополнительной информации об указателях на функцию см. Создание указателя на функцию.

Пример: fun = @max

Типы данных: function_handle

Заполните значение в виде скаляра или [] (значение по умолчанию). Значение по умолчанию fillval 0. Если subs не ссылается на каждый элемент в выходе, accumarray заполняет выход со значением, заданным fillval. Класс fillval должен совпасть со значениями, возвращенными fun.

Выведите разреженность в виде числового или логического 1 TRUE) или 0 ложь). Задайте true или 1 когда это необходимо, выходной массив, чтобы быть разреженным. Если issparse true или 1:

  • fillval должен быть 0 или [].

  • Значения в val и выходные значения fun должен оба иметь вводят double.

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

свернуть все

Выходной массив, возвращенный как вектор, матрица или многомерный массив. A имеет тот же класс как значения, возвращенные fun.

Когда sz не задан, размер A зависит от входа subs:

  • Если subs матрица с n > 1 столбцы, затем A n- размерный массив размера max(subs,[],1).

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

Больше о

свернуть все

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

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

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

Советы

  • Поведение accumarray похоже на тот из histcounts функция. Оба данных группы функций в интервалы.

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

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

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

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

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

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

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

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

| | |

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