accumarray
用积累构建阵列
语法
一个= accumarray(潜艇、val)
= accumarray(潜艇,val,深圳)
深圳= accumarray(潜艇,val,有趣)
深圳= accumarray(潜艇,val,有趣,fillval)
深圳= accumarray(潜艇,val,有趣,fillval, issparse)
描述
例子
发现本计数
创建一个下标向量,潜艇
.
潜艇= [1;2;4;2;4)
潜艇=1 2 4 2 4 4
使用accumarray
与val = 1
计算相同下标的个数潜艇
.
= accumarray(潜艇、1)
一个=1 2 0 2
结果是一个箱子计数的向量。可以得到相同的答案histcounts(潜艇、“BinMethod”,“整数”)
.然而,accumarray
也可以在高维网格上计算bin计数。
积累数据
创建一个数据向量,瓦尔
,和一个长度相同的下标值向量,潜艇
.
val = 101:105 ';潜艇= [1;3;4;3;4)
潜艇=1 3 4 3 4 4
使用accumarray
求和的值瓦尔
下标相同的潜艇
.
一个= accumarray(潜艇、val)
一个=101 0 206 208
结果是一个累积值的向量。自第二和第四元素潜艇
等于3,(3)
是的第二和第四元素的和吗瓦尔
,也就是说,A(3) = 102 + 104 = 206
.同时,(2) = 0
因为潜艇
不包含值2
.自潜艇
是一个向量,输出,一个
,也是一个向量。的长度一个
是马克斯(潜艇,[],1)
.
指定输出大小
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
val = 101:106 ';sub = [1 1;2 2;3 - 2;1 1;2 2;4 (1)
潜艇=1 1 2 2 3 2 1 1 2 2 4 1
下标的潜艇
为输出定义一个4 × 2矩阵。
使用accumarray
求和的值瓦尔
下标相同的潜艇
.
一个= accumarray(潜艇、val)
一个=205 0 0 207 0 103 106 0
结果是一个累积值的4 × 2矩阵。
使用深圳
输入的accumarray
返回一个4 × 4矩阵。您可以指定一个大小,每个维度都等于或大于默认大小,在本例中是4 * 2,但不能更小。
A = accumarray(subs,val,[4 4])
一个=205 0 0 0 207 0 0 0 103 0 0 106 0 0 0
结果是一个累积值的4 × 4矩阵。
使用自定义函数
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
Val = [100.1 101.2 103.4 102.8 100.9 101.5]';sub = [1 1;1 1;2 2;3 - 2;2 2;3 2]
潜艇=1 1 1 1 2 2 2 2 2 2 2 2 3 2
下标的潜艇
为输出定义一个3 × 2矩阵。
使用有趣的
输入的accumarray
计算数据的组内方差瓦尔
下标相同的潜艇
.指定有趣的
作为@var
.
A1 = accumarray(潜艇,val, [], @var)
A1 =0.6050 0 0 3.1250 0 0.8450
结果是一个3 × 2的方差值矩阵。
或者,您也可以指定有趣的
作为一个匿名函数,只要它接受向量输入并返回一个标量。这很有用的一种常见情况是,您希望向函数传递附加参数。在本例中,使用var
带有归一化参数的函数。
A2 = acuarray (subs,val,[],@(x) var(x,1))
A2 =0.3025 0 0 1.5625 0 0.4225
结果是一个3 × 2的归一化方差值矩阵。
求和值本身
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
val = int8 (15);sub = [1 1 1;1 1 1;1 1 2;1 1 2;2 3 1;2 3 2]
潜艇=1 1 1 1 1 1 1 1 1 2 1 1 2 2 3 1 2 3 2
下标的潜艇
为输出定义一个2 × 3 × 2的多维数组。
使用accumarray
将数据值相加瓦尔
下标相同的潜艇
.你可以使用函数句柄来对它们的原生值求和,int8
的整数类“本地”
选择的总和
函数。
A = accumarray(subs,val,[],@(x) sum(x,“本地”))
一个=2 x3x2 int8数组A(:,:,1) = 21 0 0 0 0 14 A(:,:,2) = 25 0 0 0 0 15
结果是一个2 × 3 × 2的类多维数组int8
.
单元格数组中的组值
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
val = 1:10;sub = [1 1;1 1;1 1;2 1;2 1;2 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
下标的潜艇
为输出定义一个2 × 2矩阵。
使用accumarray
把…的元素分组瓦尔
到单元格数组中。
A = accumarray(subs,val,[],@(x) {x})
一个=2 x2单元阵列{4x1 double} {0x0 double} {5x1 double} {[10]}
结果是一个2 × 2的单元格数组。
验证向量元素的顺序是否与它们出现的顺序相同瓦尔
.
1 {2,}
ans =5 6 7 8 9
从下标开始潜艇
排序后,单元格数组中数值向量的元素与它们出现的顺序相同瓦尔
.
使用依赖于数据顺序的函数
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
val = 1:5;sub = [1 2;1 1;1 - 2;1 1;2 3]
Subs = 1 2 1 1 1 2 1 1 2 3
下标的潜艇
为输出定义一个2 × 3矩阵,但对输出中的线性下标没有排序,一个
.
将值分组在瓦尔
到单元格数组中乐趣= @(x) {x}
.
A = accumarray(subs,val,[],@(x) {x})
A = 2×3 cell array [2×1 double] [2×1 double] [] [] [] [5]
结果是一个2乘3的单元格数组。
中的向量一个{1,2}
.
一个{1,2}
Ans = 3 1
的元素一个{1,2}
和in的顺序不同瓦尔
.这个向量的第一个元素是3而不是1。如果下标潜艇
对它们的线性下标没有排序,那么accumarray
可能不总是保持数据的顺序瓦尔
当它传递给有趣的
.在不寻常的情况下有趣的
要求其输入值的顺序与它们出现的顺序相同瓦尔
,对索引进行排序潜艇
关于输出的线性指标。
在本例中,使用sortrows
功能与两个输入和两个输出重新排序潜艇
而且瓦尔
同时考虑输出的线性指标。
[年代,我]= sortrows(潜艇、(2,1));A = accumarray(S,val(I),[],@(x) {x});一个{1,2}
Ans = 1 3
的元素一个{1,2}
向量现在是有序的。
用NaN值填充输出
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
val = 101:106 ';sub = [1 1;2 2;3 3;1 1;2 2;4 4]
潜艇=1 1 2 2 3 3 1 1 2 2 4 4
下标的潜艇
为输出定义一个4 × 4矩阵,但只引用16个元素中的4个。默认情况下,其他12个元素为0
在输出。
使用fillval
输入的accumarray
用NaN值填充额外的输出元素。
= accumarray(潜艇,val,[],[],南)
一个=205南南南南207南南南南103南南南106
结果是一个填充了NaN值的4 × 4矩阵。
改变输出稀疏
创建一个数据向量,瓦尔
和一个下标矩阵,潜艇
.
Val = [34 22 19 85 53 77 99 6];sub = [1 1;400 400;80 80;1 1;400 400;400 400;80 80;1 (1)
潜艇=1 1 400 400 80 80 1 1 400 400 400 400 80 80 1 1
下标的潜艇
为输出定义一个400 × 400的矩阵,但只引用160,000个元素中的3个。当操作的结果与accumarray
导致非零元素密度低的大输出数组,您可以通过将输出存储为稀疏矩阵来节省存储空间。
使用issparse
输入的accumarray
返回一个稀疏矩阵。
一个= accumarray(潜艇,瓦尔 ,[],[],[], 真正的)
A = (1,1) 125 (80,80) 118 (400,400) 152
结果是一个稀疏矩阵。可以得到相同的答案稀疏(潜艇(:1),潜艇(:,2),val)
.
输入参数
潜艇
- - - - - -下标矩阵
向量的指数|矩阵的指数|索引向量的单元格数组
下标矩阵,指定为索引向量、索引矩阵或索引向量的单元格数组。索引必须为正整数:
的每一行中的值米——- - - - - -n矩阵,
潜艇
,指定一个n-维索引到输出,一个
.例如,如果潜艇
是一个3 × 2矩阵,它包含三个二维下标。潜艇
也可以是索引的列向量,在这种情况下,一个
,也是一个列向量。第i行
潜艇
中的第i个数据值瓦尔
.如果
潜艇
是空的,那么accumarray
功能错误。
因此,潜艇
确定哪些数据瓦尔
进行分组,以及输出中的最终目的地。如果潜艇
是索引向量的单元格数组,每个向量必须具有相同的长度,并且函数将这些向量视为下标矩阵的列。
瓦尔
- - - - - -数据
向量|标量
数据:指定为向量或标量的数据:
如果
瓦尔
一个向量,它的长度必须和它的行数相等吗潜艇
.如果
瓦尔
是标量,它是标量展开的。
在这两种情况下,每一行的下标之间都存在一对一的配对潜艇
的数据值瓦尔
.
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|逻辑
|字符
复数的支持:金宝app是的
深圳
- - - - - -输出数组的大小
[]
(默认)|正整数向量
输出数组的大小,指定为正整数或的向量[]
(默认)。当你指定[]
对于默认大小,中的值潜艇
确定输出数组的大小,一个
.
当你指定深圳
作为正整数的向量,它必须满足以下性质:
如果
潜艇
是一个非空的米
——- - - - - -n
矩阵n > 1
列,然后深圳
必须有n
元素并通过逻辑测试(深圳> = max(潜艇,[],1))
.如果
潜艇
是一个非空列向量,那么深圳
必须[m 1]
在哪里m > = max(潜艇)
.
例子:Sz = [3 3]
有趣的
- - - - - -函数
[]
(默认)|函数处理
函数,指定为函数句柄或[]
(默认)。默认函数为@sum
.的有趣的
函数必须接受列向量并返回一个数值,逻辑
,或字符
标量,或者一个标量细胞
.如果下标潜艇
都没有对它们的线性下标排序,有趣的
不应依赖于其输入数据中值的顺序。有关函数句柄的更多信息,请参见创建函数处理.
例子:有趣= @max
数据类型:function_handle
fillval
- - - - - -填值
[]
(默认)|标量
填充值,指定为标量或[]
(默认)。的默认值。fillval
是0
.如果潜艇
不引用输出中的每个元素,accumarray
用指定的值填充输出fillval
.的类fillval
必须与返回的值相同有趣的
.
issparse
- - - - - -产量稀少
假
(默认)|真正的
|1
|0
输出稀疏性,指定为真正的
,1
,0
,或假
(默认)。指定真正的
或1
当您希望输出数组是稀疏的。如果issparse
是真正的
或1
:
fillval
必须0
或[]
.中的值
瓦尔
的输出值有趣的
两者都必须有类型双
.
输出参数
一个
——输出数组
向量|矩阵|多维数组
输出数组,作为向量、矩阵或多维数组返回。一个
是否与返回的值相同的类有趣的
.
当深圳
没有指定,大小的一个
取决于输入潜艇
:
如果
潜艇
是一个非空矩阵n > 1
列,然后一个
是一个n
尺寸的-维数组马克斯(潜艇,[],1)
.如果
潜艇
是一个空矩阵n > 1
列,然后一个
是一个n
-维空数组,大小为0乘0乘-…如果
潜艇
是一个非空列向量,那么一个
列向量的长度是多少马克斯(潜艇,[],1)
.的长度一个
是0
当潜艇
是空的。
更多关于
积累的元素
的行为accumarray
在12个月期间的温度数据矢量上。为了找出每个月的最高气温读数,accumarray
应用马克斯
中的每组值温度
下标相同的月
.
没有值月
指向输出的5、6、7或10个位置。这些元素是0
,但您可以指定一个值来填充usingfillval
.
提示
的行为
accumarray
类似于histcounts
函数。这两个函数都将数据分组到容器中。histcounts
使用bin边将连续值分组到1-D范围内。accumarray
组数据使用n维下标。histcounts
返回bin计数和/或bin位置。然而,accumarray
可以对归档的数据应用任何函数。
你可以模仿的行为
histcounts
使用accumarray
与val = 1
.的
稀疏的
函数也有类似于的积累行为accumarray
.稀疏的
使用二维下标将数据分组到容器中,而accumarray
将数据分组到使用的容器中n维下标。对于下标相同的元素,
稀疏的
将这些元素的和赋值给输出。accumarray
默认情况下执行相同的操作,但可选地将任何函数应用到容器。
另请参阅
之前介绍过的R2006a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。