annotate scripts/general/accumdim.m @ 14113:dac62c415e8b stable

Do more error checking on accumarray and accumdim input. * accumarray.m: Check that number indices matches number of values to accumulate. Document this change. * accumdim.m: Check that length of index vector equals length of array along given dimension. Also let the extension parameter be empty in addition to being zero. Document this change and reformat docstring. * data.cc (do_accumdim_sum): Check that number of indices matches number of values.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Tue, 27 Dec 2011 13:45:30 -0500
parents 6590446c2498
children 951eacaf9381
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 11469
diff changeset
1 ## Copyright (C) 2010-2011 VZLU Prague
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
2 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
3 ## This file is part of Octave.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
4 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
7 ## the Free Software Foundation; either version 3 of the License, or (at
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
8 ## your option) any later version.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
9 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
13 ## General Public License for more details.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
14 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, see
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
17 ## <http://www.gnu.org/licenses/>.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
18
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
19 ## -*- texinfo -*-
10692
b32a0214a464 Use > 1 test to find first non-singleton dimension rather than != 1.
Rik <octave@nomad.inbox5.com>
parents: 10397
diff changeset
20 ## @deftypefn {Function File} {} accumdim (@var{subs}, @var{vals}, @var{dim}, @var{n}, @var{func}, @var{fillval})
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
21 ## Create an array by accumulating the slices of an array into the
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
22 ## positions defined by their subscripts along a specified dimension.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
23 ## The subscripts are defined by the index vector @var{subs}.
10711
fbd7843974fa Periodic grammar check of documentation files to ensure common format.
Rik <octave@nomad.inbox5.com>
parents: 10692
diff changeset
24 ## The dimension is specified by @var{dim}. If not given, it defaults
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
25 ## to the first non-singleton dimension. The length of @var{subs} must
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
26 ## be equal to @code{size (@var{vals}, @var{dim})}.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
27 ##
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
28 ## The extent of the result matrix in the working dimension will be
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
29 ## determined by the subscripts themselves. However, if @var{n} is
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
30 ## defined it determines this extent.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
31 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
32 ## The default action of @code{accumdim} is to sum the subarrays with the
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
33 ## same subscripts. This behavior can be modified by defining the
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
34 ## @var{func} function. This should be a function or function handle
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
35 ## that accepts an array and a dimension, and reduces the array along
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
36 ## this dimension. As a special exception, the built-in @code{min} and
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
37 ## @code{max} functions can be used directly, and @code{accumdim}
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
38 ## accounts for the middle empty argument that is used in their calling.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
39 ##
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
40 ## The slices of the returned array that have no subscripts associated
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
41 ## with them are set to zero. Defining @var{fillval} to some other
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
42 ## value allows these values to be defined.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
43 ##
10397
180931276a52 fix example in accumdim
Jaroslav Hajek <highegg@gmail.com>
parents: 10396
diff changeset
44 ## An example of the use of @code{accumdim} is:
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
45 ##
12974
6590446c2498 doc: Correct Texinfo overfull hbox instances.
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
46 ## @smallexample
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
47 ## @group
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
48 ## accumdim ([1, 2, 1, 2, 1], [ 7, -10, 4;
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
49 ## -5, -12, 8;
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
50 ## -12, 2, 8;
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
51 ## -10, 9, -3;
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
52 ## -5, -3, -13])
10397
180931276a52 fix example in accumdim
Jaroslav Hajek <highegg@gmail.com>
parents: 10396
diff changeset
53 ## @result{} ans = [-10,-11,-1;-15,-3,5]
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
54 ## @end group
12974
6590446c2498 doc: Correct Texinfo overfull hbox instances.
Rik <octave@nomad.inbox5.com>
parents: 11589
diff changeset
55 ## @end smallexample
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
56 ##
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
57 ## @seealso{accumarray}
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
58 ## @end deftypefn
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
59
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
60 function A = accumdim (subs, vals, dim, n = 0, func = [], fillval = 0)
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
61
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
62 if (nargin < 2 || nargin > 5)
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
63 print_usage ();
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
64 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
65
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
66 if (isempty (fillval))
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
67 fillval = 0;
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
68 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
69
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
70 if (! isvector (subs))
10692
b32a0214a464 Use > 1 test to find first non-singleton dimension rather than != 1.
Rik <octave@nomad.inbox5.com>
parents: 10397
diff changeset
71 error ("accumdim: SUBS must be a subscript vector");
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
72 elseif (! isindex (subs)) # creates index cache
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
73 error ("accumdim: indices must be positive integers");
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
74 else
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
75 m = max (subs);
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
76 if (n == 0 || isempty (n))
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
77 n = m;
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
78 elseif (n < m)
11589
b0084095098e missing semicolons in script files
John W. Eaton <jwe@octave.org>
parents: 11587
diff changeset
79 error ("accumdim: N index out of range");
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
80 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
81 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
82
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
83 sz = size (vals);
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
84
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
85 if (nargin < 3)
10790
01f1643dfbb1 fix flipdim with trailing singleton dims
Jaroslav Hajek <highegg@gmail.com>
parents: 10711
diff changeset
86 [~, dim] = max (sz != 1); # first non-singleton dim
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
87 elseif (! isindex (dim))
10692
b32a0214a464 Use > 1 test to find first non-singleton dimension rather than != 1.
Rik <octave@nomad.inbox5.com>
parents: 10397
diff changeset
88 error ("accumdim: DIM must be a valid dimension");
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
89 elseif (dim > length (sz))
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
90 sz(end+1:dim) = 1;
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
91 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
92 sz(dim) = n;
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
93
14113
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
94 if (length (subs) != size (vals, dim))
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
95 error ("accumdim: dimension mismatch")
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
96 endif
dac62c415e8b Do more error checking on accumarray and accumdim input.
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 12974
diff changeset
97
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
98 if (isempty (func) || func == @sum)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
99 ## Fast summation case.
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
100 A = __accumdim_sum__ (subs, vals, dim, n);
11587
c792872f8942 all script files: untabify and strip trailing whitespace
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
101
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
102 ## Fill in nonzero fill value
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
103 if (fillval != 0)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
104 mask = true (n, 1);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
105 mask(subs) = false;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
106 subsc = {':'}(ones (1, length (sz)));
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
107 subsc{dim} = mask;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
108 A(subsc{:}) = fillval;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
109 endif
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
110 return
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
111 endif
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
112
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10395
diff changeset
113 ## The general case.
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
114 ns = length (subs);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
115 ## Sort indices.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
116 [subs, idx] = sort (subs(:));
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
117 ## Identify runs.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
118 jdx = find (subs(1:ns-1) != subs(2:ns));
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
119 jdx = [jdx; ns];
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
120 ## Collect common slices.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
121 szc = num2cell (sz);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
122 szc{dim} = diff ([0; jdx]);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
123 subsc = {':'}(ones (1, length (sz)));
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
124 subsc{dim} = idx;
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
125 vals = mat2cell (vals(subsc{:}), szc{:});
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
126 ## Apply reductions. Special case min, max.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
127 if (func == @min || func == @max)
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
128 vals = cellfun (func, vals, {[]}, {dim}, "uniformoutput", false);
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
129 else
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
130 vals = cellfun (func, vals, {dim}, "uniformoutput", false);
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
131 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
132 subs = subs(jdx);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
133
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
134 ## Concatenate reduced slices.
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
135 vals = cat (dim, vals{:});
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
136
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
137 ## Construct matrix of fillvals.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
138 if (fillval == 0)
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
139 A = zeros (sz, class (vals));
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
140 else
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
141 A = repmat (fillval, sz);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
142 endif
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
143
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
144 ## Set the reduced values.
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
145 subsc{dim} = subs;
11469
c776f063fefe Overhaul m-script files to use common variable name between code and documentation.
Rik <octave@nomad.inbox5.com>
parents: 11191
diff changeset
146 A(subsc{:}) = vals;
10395
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
147
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
148 endfunction
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
149
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
150 %%test accumdim vs. accumarray
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
151
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
152 %!shared a
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
153 %! a = rand (5, 5, 5);
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
154
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
155 %!assert (accumdim ([1;3;1;3;3], a)(:,2,3), accumarray ([1;3;1;3;3], a(:,2,3)))
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
156 %!assert (accumdim ([2;3;2;2;2], a, 2, 4)(4,:,2), accumarray ([2;3;2;2;2], a(4,:,2), [1,4]))
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
157 %!assert (accumdim ([2;3;2;1;2], a, 3, 3, @min)(1,5,:), accumarray ([2;3;2;1;2], a(1,5,:), [1,1,3], @min))
aeb5b1e47978 new function: accumdim
Jaroslav Hajek <highegg@gmail.com>
parents:
diff changeset
158 %!assert (accumdim ([1;3;2;2;1], a, 2, 3, @median)(4,:,5), accumarray ([1;3;2;2;1], a(4,:,5), [1,3], @median))