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
.
这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
的价值
有趣的
肯定是其中之一@sum
(默认),@prod
,@min
,@max
,@any
,或@all
.数据
而且fillval
必须是满的(非稀疏)逻辑
或浮点数(双
或单
)数组。
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。