matlab函数accumarray,Matlab accumarray函数

A = accumarray(subs,val,sz,fun,fillval)

sub:提供累计信息的指示向量

val:提供累计数值的向量

sz:控制输出向量A的size

fun:用于计算累计后向量的函数,默认为@sum,即累加

fillval:填补A中的空缺项,默认为0

例子:

myfun = @(x) 1./(2*numel(x)) * sum(x);

myfun =

@(x)1./(2*numel(x))*sum(x)

subs=[7,2,5,7,2]';

subs =

7

2

5

7

2

val=1:5;

val =

1     2     3     4     5

sz=[10,1];

sz =

10     1

A=accumarray(subs,val,sz,myfun,nan);

A =

NaN

1.7500

NaN

NaN

1.5000

NaN

1.2500

NaN

NaN

NaN

个人对此函数的理解:

首先,函数根据参数中sz,生成一个中间矩阵B,此例中sz=[10,1],所以B是一个10*1的矩阵。

然后,函数根据subs中的指示,将val中的数值摆放到B中。

subs  val

7     1

2     2

5     3

7     4

2     5

意思就是,val中的1被扔到了B中第7的位置,同样,2扔到B中第2个位置,3到B中5,4到B中7,5到2。

这样B中的2,5,7位就被摆放上了数值,而且,2和7两个位置上被摆上了2个数值。

B =

NaN

2,5

NaN

NaN

3

NaN

1,4

NaN

NaN

NaN

其他还有7个位置并没有被摆放任何数值,我们暂时不管他,给他扔上NaN。

然后,accumarray函数就会根据自定义的函数myfun,来计算了。拿什么算呢,拿的就是这个中间矩阵B,我们定义的myfun意义就是均值的一般,所以也可以定义的时候写成:

myfun = @(x) mean(x)./2;

这下就简单了,就相当于mean(B)./2,然后得出的结果就是A了。

A =

NaN

1.7500

NaN

NaN

1.5000

NaN

1.2500

NaN

NaN

NaN

个人理解大概是个这样的过程,接下来再去看matlab的help文件就比较容易懂了。

doc accumarray

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值