主要内容

accumarray

累积矢量元素

描述

例子

B= accumarray (印第安纳州数据对数据组求和积累的元素向量的数据根据所规定的组别印第安纳州.然后计算每一组的总和。中的值印第安纳州定义数据所属的组和输出数组的索引B存储每个组和的位置。

若要按顺序返回组和,请指定印第安纳州作为一个向量。然后是带索引的组accumarray返回它的总和B(我).例如,如果Ind = [1 1 2 2]'而且Data = [1 2 3 4]',然后B = accumarray(ind,data)返回列向量。B = [3 7]'

若要以另一种形状返回组和,请指定印第安纳州作为一个矩阵。对于一个——- - - - - -n矩阵印第安纳州,每一行表示组分配和n-维索引到输出B.例如,如果印第安纳州包含表单的两行[3 - 4],则其中对应元素的和数据存储在的(3,4)元素中B

的元素B哪个索引没有出现印第安纳州都充满了0默认情况下。

例子

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

例子

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

例子

B= accumarray (印第安纳州数据深圳有趣的fillval填满所有元素B中索引未引用的印第安纳州用标量值fillval.指定fillval作为[]使用默认值0

例子

B= accumarray (印第安纳州数据深圳有趣的fillvalissparse返回一个数组B这是稀疏的issparse真正的1,和完整的ifissparse0.输出B默认为已满。

例子

全部折叠

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

数据= (1:6)'
data =6×11 2 3 4 5 6
Ind = [1 3 4 2 4 1]'
印第安纳州=6×11 3 4 2 4

中的值求和数据中指定的组印第安纳州

B = accumarray(ind,data)
B =4×17 4 2 8

或者,使用groupsummary函数,指定“和”作为群计算。

B = groupsummary(data,ind,“和”
B =4×17 4 2 8

创建一个组向量。

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

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

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

或者,使用groupcounts函数。

B = groupcounts(ind)
B =4×12 1 1 2

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

数据= 1:6
data =1×61 2 3 4 5 6
Ind = [1 1;2 2;3 - 2;1 1;2 2;4 (1)
印第安纳州=6×21 1 2 2 3 2 1 1 2 2 4

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

B1 = accumarray(ind,data)
B1 =4×25 0 0 7 0 3 6 0

通过将输出大小指定为,将输出填充为4 × 4矩阵(4 - 4)

B2 = accumarray(ind,data,[4 4])
B2 =4×45 0 0 0 0 7 0 0 0 0 3 0 0 6 0 0 0 0

计算群体方差而不是总和。

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

Data = [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]
印第安纳州=6×21 1 1 1 2 2 3 2 2 2 3 2

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

B1 = accumarray(ind,data,[],@var)
B1 =3×20.6050 0 0 3.1250 0 0.8450

可以将组计算指定为接受向量输入并返回标量的匿名函数。当您希望向函数传递附加参数时,这非常有用。例如,使用var函数的归一化参数值1

A2 = accumarray(ind,data,[],@(x) var(x,1))
A2 =3×20.3025 0 0 1.5625 0 0.4225

属性的附加参数总和通过对方法输入使用匿名函数来实现。

创建数据向量和矩阵印第安纳州它定义了数据组和输出中的三维索引。

数据= int8(10:15)
data =1x6 int8行向量10 11 12 13 14 15
Ind = [1 1 1;11 11 1;1 1 2;1 1 2;2 3 1;2 3 2]
印第安纳州=6×31 1 1 1 1 1 1 1 2 1 1 2 2 3 1 2 3

按组在其原生整数类中对数据求和int8通过使用“本地”选项。总和函数。为此,使用指定一个匿名函数@ (x)和(x,“本地”)对于方法输入。结果是一个类型为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]
印第安纳州=10×21 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2

对元素进行分组数据变成一个单元格数组。

B = accumarray(ind,data,[],@(x) {x})
B =2×2单元格数组{4x1 double} {0x0 double} {5x1 double} {[10]}

验证向量元素的顺序与它们在中出现的顺序相同数据

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]
印第安纳州=6×21 1 2 2 3 3 1 1 2 2 4 4

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

B = accumarray(ind,data,[],[],NaN)
B =4×4205南南南南207南南南南103南南南南南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)
印第安纳州=8×21 1 400 400 80 80 1 1 400 400 400 400 80 80 1 1

的要素印第安纳州为输出定义一个400乘400的矩阵,但只引用160,000个元素中的3个。当的输出accumarray在非零元素密度较低的大型数组中,可以通过指定issparse选择真正的,创建一个稀疏矩阵,而不是一个完整的矩阵。

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

输入参数

全部折叠

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

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

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

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

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

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

  • 如果数据是一个向量,那么它的长度必须与索引数组中的行数相同。

输出数组的大小,指定为正整数的向量或[].例如,Sz = [5 7]生成一个5 × 7的输出数组。当你指定[]对于大小,索引数组中的值决定输出的大小。中的维度长度深圳必须匹配或超过索引数组中的维度长度。

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

例子:乐趣= @max

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

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

issparse真正的1,填充值必须为0[],计算函数的输入数据和输出都必须有类型

输出参数

全部折叠

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

B未指定,输出大小取决于索引数组印第安纳州

  • 如果印第安纳州那么它是列向量吗B列向量是长度吗马克斯(印第安纳州,[],1)

  • 如果印第安纳州那么矩阵是否有多个列呢B多维数组的大小马克斯(印第安纳州,[],1)

更多关于

全部折叠

积累的元素

的行为accumarray在12个月期间的温度数据矢量上。要找出每个月的最高温度读数,accumarray应用马克斯中每组值的函数温度它们有相同的指标

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

提示

  • 的行为accumarray是否与函数相似groupsummary而且groupcounts用于按组计算汇总统计信息和分别计算组中元素的数量。在MATLAB中获得更多的分组功能®,请参阅数据预处理

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

    • histcounts使用bin边将连续值分组到1-D范围。accumarray对数据进行分组n维指数。

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

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

  • 稀疏的函数也有类似于的积累行为accumarray

    • 稀疏的使用二维索引对数据进行分组,而accumarray对数据进行分组n维指数。

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

扩展功能

版本历史

R2006a之前介绍