zoukankan      html  css  js  c++  java
  • accumarray

      1 Example 1
      2 
      3 
      4 Create a 5-by-1 vector and sum values for repeated 1-D subscripts:
      5 val = 101:105;
      6 subs = [1; 2; 4; 2; 4]
      7 subs =
      8      1 
      9      2 
     10      4 
     11      2 
     12      4 
     13 
     14 A = accumarray(subs, val)
     15 A =
     16    101       % A(1) = val(1) = 101
     17    206       % A(2) = val(2)+val(4) = 102+104 = 206
     18      0       % A(3) = 0
     19    208       % A(4) = val(3)+val(5) = 103+105 = 208
     20 
     21 
     22     0     0
     23      0     0     0     0
     24      0     0     0     0
     25      2     0     0     0
     26 
     27 
     28 The order of the subscripts matters:
     29 val = 101:106;
     30 subs=[1 2; 3 1; 1 2; 4 4; 4 1; 4 1];
     31 B1 = accumarray(subs,val,[],@(x)sum(diff(x)))
     32 
     33 B1 =
     34 
     35      0    -2     0     0
     36      0     0     0     0
     37      0     0     0     0
     38     -1     0     0     0
     39 
     40 
     41 Example 3
     42 
     43 
     44 Create a 2-by-3-by-2 array and sum values for repeated 3-D subscripts:
     45 val = 101:105;
     46 subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];
     47 
     48 A = accumarray(subs, val)
     49 A(:,:,1) =
     50    101     0     0
     51      0     0     0
     52 A(:,:,2) =
     53      0     0     0
     54    206     0   208
     55 
     56 Example 4
     57 
     58 
     59 Create a 2-by-3-by-2 array, and sum values natively:
     60 val = 101:105;
     61 subs = [1 1 1; 2 1 2; 2 3 2; 2 1 2; 2 3 2];
     62 
     63 A = accumarray(subs, int8(val), [], @(x) sum(x,'native'))
     64 A(:,:,1) =
     65   101    0    0
     66     0    0    0
     67 A(:,:,2) =
     68     0    0    0
     69   127    0  127
     70 
     71 class(A)
     72 ans =
     73     int8
     74 
     75 Example 5
     76 
     77 
     78 Pass multiple subscript arguments in a cell array.
     79 
     80 Create a 12-element vector V:
     81 V = 101:112;
     82 
     83 
     84 
     85 Create three 12-element vectors, one for each dimension of the resulting array A. Note how the indices of these vectors determine which elements of V are accumulated in A:
     86 %        index 1   index 6 => V(1)+V(6) => A(1,3,1)
     87 %          |         |
     88 rowsubs = [1 3 3 2 3 1 2 2 3 3 1 2];
     89 colsubs = [3 4 2 1 4 3 4 2 2 4 3 4];
     90 pagsubs = [1 1 2 2 1 1 2 1 1 1 2 2];
     91 %                |
     92 %              index 4 => V(4) => A(2,1,2)
     93 %
     94 % A(1,3,1) = V(1) + V(6) = 101 + 106 = 207
     95 % A(2,1,2) = V(4) = 104
     96 
     97 
     98 Call accumarray, passing the subscript vectors in a cell array:
     99 A = accumarray({rowsubs colsubs pagsubs}, V)
    100 A(:,:,1) =
    101      0     0   207     0        % A(1,3,1) is 207
    102      0   108     0     0
    103      0   109     0   317
    104 A(:,:,2) =
    105      0     0   111     0
    106    104     0     0   219        % A(2,1,2) is 104
    107      0   103     0     0
    108 
    109 Example 6
    110 
    111 
    112 Create an array with the max function, and fill all empty elements of that array with NaN:
    113 val = 101:105;
    114 subs = [1 1; 2 1; 2 3; 2 1; 2 3];
    115 
    116 A = accumarray(subs, val, [2 4], @max, NaN)
    117 A =
    118    101   NaN   NaN   NaN
    119    104   NaN   105   NaN
    120 
    121 Example 7
    122 
    123 
    124 Create a sparse matrix using the prod function:
    125 val = 101:105;
    126 subs = [1 1; 2 1; 2 3; 2 1; 2 3];
    127 
    128 A = accumarray(subs, val, [2 4], @prod, 0, true)
    129 A =
    130    (1,1)            101
    131    (2,1)          10608
    132    (2,3)          10815
    133 
    134 
    135 Example 8
    136 
    137 
    138 Count the number of entries accumulated in each bin:
    139 val = 1;
    140 subs = [1 1; 2 1; 2 3; 2 1; 2 3];
    141 
    142 A = accumarray(subs, val, [2 4])
    143 A =
    144      1     0     0     0
    145      2     0     2     0
    146 
    147 Example 9
    148 
    149 
    150 Create a logical array that shows which bins will accumulate two or more values:
    151 val = 101:105;
    152 subs = [1 1; 2 1; 2 3; 2 1; 2 3];
    153 
    154 A = accumarray(subs, val, [2 4], @(x) length(x) > 1)
    155 A =
    156      0     0     0     0
    157      1     0     1     0
    158 
    159 Example 10
    160 
    161 
    162 Group values in a cell array:
    163 val = 101:105;
    164 subs = [1 1; 2 1; 2 3; 2 1; 2 3];
    165 
    166 A = accumarray(subs, val, [2 4], @(x) {x})
    167 A = 
    168     [       101]     []              []     []
    169     [2x1 double]     []    [2x1 double]     []
    170 
    171 A{2}
    172 ans =
    173    104
    174    102
    Examples
  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/wangshixi12/p/4507649.html
Copyright © 2011-2022 走看看