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
默认情况下。
例子
按组合计数据
创建一个数据向量和一个对应的向量印第安纳州
这就定义了组。
数据= (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
fillval
- - - - - -填值
[]
(默认)|标量
当输出的元素与索引数组中提供的索引(指定为标量或[]
,使用默认值0
.的数据类型fillval
必须与计算函数输出的数据类型匹配。
issparse
- - - - - -产量稀少
假
或0
(默认)|真正的
或1
输出稀疏性,指定为数字或逻辑1
(真正的
)或0
(假
).
当issparse
是真正的
或1
,填充值必须为0
或[]
,计算函数的输入数据和输出都必须有类型双
.
输出参数
B
-输出数组
向量|矩阵|多维数组
输出数组,作为向量、矩阵或多维数组返回。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
默认情况下是总和,但可以对数据应用任何函数。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
的显式边界
accumarray
输入值时,代码生成器可能无法预先确定大小accumarray
输出。因此,必须启用可变大小数组和动态内存分配。输入参数不能包含枚举。
这个函数
有趣的
必须返回一个完整(非稀疏)标量。当
有趣的
返回一个1乘1的单元格数组:必须为指定一个值
fillval
.您指定的值必须是1乘1的标量单元格数组,并且单元格的内容必须具有相同的数据类型有趣的
的回报。累积值的顺序
有趣的
接收作为输入可能不匹配的顺序在MATLAB中。
的输出类型
有趣的
,代码生成器可以调用有趣的
的输入参数accumarray
.因此,如果执行有趣的
导致副作用,例如通过修改全局或持久变量或打印到输出,则生成的代码结果可能与MATLAB结果不同。
线程环境
使用MATLAB®在后台运行代码backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.
这个函数完全支持基于线程的环境。万博1manbetx有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
的价值
有趣的
肯定是其中之一@sum
(默认),@prod
,@min
,@max
,@any
,或@all
.数据
而且fillval
必须是满的(非稀疏)逻辑
或浮点数(双
或单
)数组。
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
R2006a之前介绍
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。