zoukankan      html  css  js  c++  java
  • MATLAB accumarray

    先看看subs和val的具体内容
    subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];
    subs =
         1     1     1
         2     1     2
         2     3     2
         2     1     2
         2     3     2
    val = (101:105)'
    val =
       101
       102
       103
       104
       105
    val的元素个数与subs的行数是一致的。
    A = accumarray(subs, val)的实现过程分成2步。
    第一步是把val中的元素,按照subs对应行所给出的下标放到一个新的cell矩阵B中(cell是为了方便解释,也就是说B矩阵中的每个位置可以放入多个数值),注意,subs的值是B的下标,不是val的。举例来说,subs第一行[ 1     1     1],意思就是把val中第一个元素(val(1))放入到B(1,1,1)的位置,依次类推,val(2)放入到B(2     1     2),val(3)放入到B(2     3    2),val(4)放入到B(2     1     2),val(5)放入到B(2    3   2)。此时,可以看到B(1,1,1)中有1个数(val(1));B(2     1    2)有2个数(val(2),val(4));B(2    3    2)也有2个数(val(3),val(5))。
    第二步,把B中每个单元中的数分别累加,并放入到A的对应位置。
    注:accumarray默认的是把每个单元中的数累加,因为对每个单元中的数的默认处理函数是sum。可以通过A = accumarray(subs,val,[],@fun)的调用格式来指定其他的处理函数,比如说mean。对指定的fun函数的要求是,接受列向量输入,输出单个的数值型,、字符型或逻辑型变量。
    A的维数与B相同,A中的元素默认为零。A的大小为max(subs(1))×max(subs(2))×max(subs(3))...
    因此,
    A(1,1,1)=val(1)=101;
    A (2 , 1 , 2)=val(2)+val(4)=102+104=206;
    A (2, 3 ,  2)=val(3)+val(5)=1-03+105=208,
    A的其他位置都为零。输出A就得到
    A(:,:,1) =
       101     0     0
         0     0     0
    A(:,:,2) =
         0     0     0
       206     0   208
    很显然,A的维数与subs的列数相等。
    A = accumarray(subs, val)
    A = accumarray(subs,val,sz)
    sz 可以用来指定A大小,但是不能小于A = accumarray(subs, val)得到的A的大小。比如A = accumarray(subs, val)的到A是一个3×4的二维矩阵,那么sz应当为一个包含2个元素的向量sz=[m1,m2] (sz向量的长度和A的维数相等),其中,m1大于等于3,m2大于等于4. 但是,当得到的A是一个p×1的一维向量时,sz=[m,1],m大于等于p。另外,sz可以赋值为空,表示由函数自动决定A的大小。
    A = accumarray(subs,val,sz,fun)
    fun可以指定专门的处理函数,默认的处理函数为sum
    A = accumarray(subs,val,sz,fun,fillval)
    fillval指定A中元素的默认值。可以等于NaN
    A = accumarray(subs,val,sz,fun,fillval,issparse)
    isspares选择A是否使用稀疏矩阵的格式
    A = accumarray({subs1, subs2, ...}, val,...)
    {subs1, subs2, ...},等同于A = accumarray(subs, val,...),此时,subs=[subs1, subs2, ...]或者=[subs1;subs2; ...]
  • 相关阅读:
    Spring Boot 使用常见问题
    JPA 使用
    JPA 复杂查询
    Gitlab利用Webhook实现Push代码后的jenkins自动构建
    消息中间件的使用场景
    消息中间件资料整理
    js原生跨域--用script标签实现
    遍历类成员并赋值
    Spring boot 读取 application.properties 文件方法
    fastjson 进行json转实体类对象及一些常用操作
  • 原文地址:https://www.cnblogs.com/hyb221512/p/10790650.html
Copyright © 2011-2022 走看看