主要内容

accumarray

累积矢量元素

描述

例子

B= accumarray (印第安纳州数据uks数据组积累的元素一个向量的数据根据中指定的组印第安纳州.然后计算每组的总和。中的值印第安纳州定义数据所属的组和索引到输出数组中B每个组和存储在其中。

要按顺序返回组和,请指定印第安纳州作为一个向量。然后是带索引的组accumarray返回其和B(我).例如,如果IND = [1 1 2 2]'数据= [1 2 3 4]',然后B = accumarray(印第安纳州、数据)返回列向量B = [3 7]'

要在另一种形状中返回组和,请指定印第安纳州作为一个矩阵。对于一个——- - - - - -n矩阵印第安纳州,每行代表组分配和一个n- 实证指数进入输出B.例如,如果印第安纳州包含表单的两行[3 - 4],然后是中相应元素的和数据存储在元素的(3,4)中B

要点B谁的索引没有出现在印第安纳州充满了0默认情况下。

例子

B= accumarray (印第安纳州数据SZ.返回一个数组B填充到尺寸SZ..指定SZ.中匹配或超过维度长度的正整数向量印第安纳州.输出中的额外元素用0.指定SZ.作为[]让索引印第安纳州确定输出的大小。

例子

B= accumarray (印第安纳州数据SZ.有趣的应用函数有趣的给每一组数据指定的印第安纳州.指定有趣的使用符号,如@mean或者[]使用默认值@和

例子

B= accumarray (印第安纳州数据SZ.有趣的fillval填满B没有被索引引用的印第安纳州用标量值fillval.指定fillval作为[]使用默认值0

例子

B= accumarray (印第安纳州数据SZ.有趣的fillval颁奖物返回一个数组B这是稀疏的颁奖物真的或者1,充实,如果颁奖物或者0.输出B默认为满。

例子

全部折叠

创建一个数据向量和一个相应的向量印第安纳州定义组。

数据=(1:6)'
data =6×11 2 3 4 5 6
IND = [1 3 4 2 4 1]'
IND =6×11 3 4 2 4

求和数据印第安纳州

B = accumarray(印第安纳州、数据)
B =4×17 4 2 8

或者,使用groupsummary函数,指定'和'作为组计算。

B = groupsummary(数据、印第安纳州'和'
B =4×17 4 2 8

创建组矢量。

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

将标量扩展应用于数字1中定义的每个组中元素的数量印第安纳州

B = accumarray(印第安纳州,1)
B =4×12 1 1 2

或者,使用groupcounts函数。

B = groupcounts(印第安纳州)
B =4×12 1 1 2

创建一个数据向量和一个输出指数矩阵印第安纳州这定义了数据组。

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×21 1 2 2 3 2 1 1 2 2 4 1

求和数据对于每一组印第安纳州.指数印第安纳州定义输出的4×2个位置矩阵。

B1 = accumarray(印第安纳州、数据)
B1 =4×25 0 0 7 0 3 6 0

通过指定输出大小为,将输出填充为4 × 4矩阵[4 4]

B2 = Accularray(IND,数据,[4 4])
B2 =4×45 0 0 0 7 0 0 0 3 0 0 6 0 0 0

计算组的方差而不是总和。

创建一个数据向量和一个矩阵印第安纳州它定义了数据组。

数据= [100.1 101.2 103.4 102.8 100.9 101.5]
data =6×1100.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×21 1 1 1 2 2 2 2 2 2 2 2

通过指定函数句柄来计算每个组的方差@var.作为方法的输入。此语法应用于var函数给组而不是

B1 = Accularray(IND,DATA,[],@ var)
B1 =3×20.6050 0 0 3.1250 0 0.8450

可以将组计算指定为接受向量输入并返回标量的匿名函数。当您想要向函数传递额外的参数时,这是非常有用的。例如,使用thevar函数具有归一化参数值1

A2 = Accularray(IND,DATA,[],@(x)var(x,1))
A2 =3×20.3025 0 0 1.5625 0 0.4225

的附加参数方法输入使用匿名函数。

创建一个数据向量和一个矩阵印第安纳州将数据和3-D指数的组定义为输出。

data = int8 (15)
data =1x6 Int8行向量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×31 1 1 1 1 1 1 1 1 2 1 1 2 2 2 3 1 2 3 2

在其本机整数类中按组uk数据INT8.通过使用'本国的'选择函数。为此,请指定一个匿名函数@(x)sum(x,'native')用于方法输入。结果是一个2乘3乘2的多维数组INT8.

B = accumarray(ind,data,[],@(x)) sum(x,)'本国的'))
B =2x3x2 INT8数组B(:,:,1)= 21 0 0 0 0 14 b(:,:2)= 25 0 0 0 0 15

创建一个数据向量和一个矩阵印第安纳州它定义了数据组。

数据= 1:10
data =1×101 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×21 1 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2

组的元素数据进入小区阵列。

B = Accularray(IND,DATA,[],@(x){x})
B =2×2单元阵列{4x1 double} {0x0 double} {5x1 double} {[10]}

验证vector元素是否与它们在数据

B {2,}
ans =5×15 6 7 8 9

创建一个数据向量和一个矩阵印第安纳州它定义了数据组。

数据=(101:106)'
data =6×1101 102 103 104 105 106
Ind = [1 1;2 2;3 3;1 1;2 2;4 4]
IND =6×21 1 2 2 3 3 1 1 2 2 4 4

元素印第安纳州为输出定义一个4 × 4矩阵,但只引用16个元素中的4个。默认情况下,其他12个元素是0在输出。填充额外的输出元素值,而不是0

B = Accularray(IND,DATA,[],[],NAN)
B =4×4205纳米纳米NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 106

创建一个数据向量和一个矩阵印第安纳州它定义了数据组。

数据= [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×21 1 400 400 80 80 1 1 400 400 400 400 80 80 1 1

元素印第安纳州为输出定义一个400 × 400的矩阵,但仅引用160,000个元素中的3个。当输出accumarray结果在非零元素密度低的大数组中,可以通过指定颁奖物选择真的,创建稀疏矩阵而不是完整的矩阵。

B = accumarray(印第安纳州、数据 ,[],[],[], 真正的)
B = (1,1) 125 (80,80) 118 (400,400) 152

输入参数

全部折叠

输出索引,指定为向量的向量、矩阵或单元格数组。

  • 如果印第安纳州是向量,每个元素将索引指定到输出中,并定义累计的组accumarray.所有元素必须是正整数和长度印第安纳州必须与数据向量的长度匹配。

  • 如果印第安纳州是一个——- - - - - -n矩阵,然后每行指定一个n- 尺寸指数进入输出。的th行印第安纳州对应于数据中的第Th值和其中的行数印第安纳州必须与数据向量的长度匹配。例如,如果印第安纳州是一个3 × 2矩阵,它包含三个二维指标。每一行的第一个元素是输出的行索引,第二个元素是列索引。

  • 如果印第安纳州是索引向量的单元格数组,那么每个向量必须具有相同的长度,并将它们视为列。

要积累的数据,指定为标量或向量。

  • 如果数据是标量,则其值是展开的标量。

  • 如果数据是向量,则它必须具有与索引数组中的行数相同的长度。

输出阵列的大小,指定为正整数的向量或作为[].例如,sz = [5 7]生成一个5乘7的输出数组。当您指定时[]对于大小,索引数组中的值确定输出的大小。尺寸长度SZ.必须匹配或超过索引数组中的维度长度。

组计算,指定为函数句柄。accumarray按组累积数据向量的元素,然后应用该函数有趣的到集团元素。当您指定时有趣= [],计算使用默认函数.指定的函数必须接受列向量并返回一个数字,逻辑, 或者字符标量,或标量细胞.有关函数句柄的更多信息,请参见创建功能句柄

例子:有趣= @max.

填充值当输出的元素不对应于索引数组中提供的索引,指定为标量或作为标量[],使用默认值0.数据类型fillval必须与计算函数输出的数据类型匹配。

输出稀疏性,指定为数字或逻辑1真的)或0)。

颁奖物真的或者1,则填充值必须为0或者[],且计算函数的输入数据和输出数据都必须具有类型

输出参数

全部折叠

输出数组,作为向量、矩阵或多维数组返回。B具有与组计算功能返回的值相同的数据类型。

当尺寸B时,输出大小取决于索引数组印第安纳州

  • 如果印第安纳州是列向量吗B列向量是长度的吗Max(Ind,[],1)

  • 如果印第安纳州一个矩阵有多个列吗B是一个多维大小的数组Max(Ind,[],1)

更多关于

全部折叠

积累的元素

以下图示说明了行为accumarray在12个月内拍摄的温度数据矢量。找到每个月的最高温度读数,accumarray适用马克斯函数到每组值温度有相同的指数

没有值指向输出的5,6,7或10个位置。这些元素是0默认输出。

提示

  • 的行为accumarray有类似的功能吗groupsummarygroupcounts用于按组计算汇总统计信息,并分别计算组中元素的数量。有关MATLAB中更多的分组功能®,请参阅数据预处理

  • 的行为accumarray也类似于histcounts函数。

    • histcounts使用bin边将连续值分组到1-D范围。accumarray使用群组数据n- 实证指数。

    • histcounts只能返回箱数和箱位。accumarray可以对数据应用任何函数。

    你可以模仿行为histcounts使用accumarray数据= 1

  • 稀疏的功能也具有类似的累积行为accumarray

    • 稀疏的使用2-D指数组进行数据,而accumarray使用群组数据n- 实证指数。

    • 对于指数相同的元素,稀疏的适用函数(值)或任何函数(逻辑值),并在输出矩阵中返回标量结果。accumarray默认情况下是求和,但可以对数据应用任何函数。

扩展能力

在R2006A之前介绍