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


你可能感兴趣的:(matlab,fun)