文档

accumarray

用积累构建阵列

语法

一个= accumarray(潜艇、val)
= accumarray(潜艇,val,深圳)
深圳= accumarray(潜艇,val,有趣)
深圳= accumarray(潜艇,val,有趣,fillval)
深圳= accumarray(潜艇,val,有趣,fillval, issparse)

描述

例子

一个= accumarray (潜艇瓦尔返回数组一个通过积累的元素的向量瓦尔使用下标潜艇.如果潜艇是列向量,则每个元素在输出中定义对应的下标,这也是一个列向量。的accumarray函数收集的所有元素瓦尔下标相同的潜艇并将它们的总和存储在一个对应于该下标(用于索引(我)=总和(val(我)潜艇(:)= =)).的元素一个谁的下标没有出现潜艇等于0。

对于一个——- - - - - -n矩阵潜艇,每一行表示n-维下标到输出一个.的第i行潜艇对应于向量的第i个元素瓦尔

例子

一个= accumarray (潜艇瓦尔深圳返回一个数组,一个,大小深圳.指定深圳作为正整数的向量来定义输出的大小,或为[]让下标进入潜艇确定输出的大小。使用深圳潜艇不引用您希望在输出中显示的尾随行、列或维。

例子

一个= accumarray (潜艇瓦尔深圳有趣的应用函数有趣的元素的每个子集瓦尔下标相同的潜艇.指定有趣的使用@符号(例如,@mean),或[]若要使用默认函数,@sum

例子

一个= accumarray (潜艇瓦尔深圳有趣的fillval填充了所有元素一个没有被下标引用的潜艇对于标量值,fillval.的fillval的返回值必须具有相同的类有趣的.指定fillval作为[]若要使用默认值,0

例子

一个= accumarray (潜艇瓦尔深圳有趣的fillvalissparse返回一个数组,一个,如果标量是稀疏的issparse真正的1, full ifissparse0.输出,一个,默认为满。

例子

全部折叠

创建一个下标向量,潜艇

潜艇= [1;2;4;2;4)
潜艇=1 2 4 2 4 4

使用accumarrayval = 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}向量现在是有序的。

创建一个数据向量,瓦尔和一个下标矩阵,潜艇

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

填充值,指定为标量或[](默认)。的默认值。fillval0.如果潜艇不引用输出中的每个元素,accumarray用指定的值填充输出fillval.的类fillval必须与返回的值相同有趣的

输出稀疏性,指定为真正的10,或(默认)。指定真正的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使用accumarrayval = 1

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

    • 稀疏的使用二维下标将数据分组到容器中,而accumarray将数据分组到使用的容器中n维下标。

    • 对于下标相同的元素,稀疏的将这些元素的和赋值给输出。accumarray默认情况下执行相同的操作,但可选地将任何函数应用到容器。

之前介绍过的R2006a

这个话题有帮助吗?