annotate scripts/statistics/mean.m @ 33623:4517f929c59d bytecode-interpreter tip

maint: Merge default to bytecode-interpreter
author Arun Giridhar <arungiridhar@gmail.com>
date Fri, 24 May 2024 16:22:41 -0400
parents 2e484f9f1f18
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ########################################################################
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 ##
32632
2e484f9f1f18 maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 32495
diff changeset
3 ## Copyright (C) 1995-2024 The Octave Project Developers
27918
b442ec6dda5c use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents: 26596
diff changeset
4 ##
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 ## See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 ## distribution or <https://octave.org/copyright/>.
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
7 ##
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3456
diff changeset
8 ## This file is part of Octave.
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3456
diff changeset
9 ##
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24512
diff changeset
10 ## Octave is free software: you can redistribute it and/or modify it
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3456
diff changeset
11 ## under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24512
diff changeset
12 ## the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
13 ## (at your option) any later version.
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
14 ##
3922
38c61cbf086c [project @ 2002-05-01 06:48:35 by jwe]
jwe
parents: 3456
diff changeset
15 ## Octave is distributed in the hope that it will be useful, but
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22323
diff changeset
18 ## GNU General Public License for more details.
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
19 ##
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
20 ## You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
21 ## along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24512
diff changeset
22 ## <https://www.gnu.org/licenses/>.
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 ##
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ########################################################################
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
25
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
26 ## -*- texinfo -*-
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
27 ## @deftypefn {} {@var{m} =} mean (@var{x})
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
28 ## @deftypefnx {} {@var{m} =} mean (@var{x}, @var{dim})
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
29 ## @deftypefnx {} {@var{m} =} mean (@var{x}, @var{vecdim})
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
30 ## @deftypefnx {} {@var{m} =} mean (@var{x}, "all")
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
31 ## @deftypefnx {} {@var{m} =} mean (@dots{}, @var{nanflag})
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
32 ## @deftypefnx {} {@var{m} =} mean (@dots{}, @var{outtype})
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
33 ## Compute the mean of the elements of @var{x}.
20174
d9341b422488 doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents: 19833
diff changeset
34 ##
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
35 ## If @var{x} is a vector, then @code{mean (@var{x})} returns the mean of the
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
36 ## elements in @var{x} defined as
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
37 ## @tex
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
38 ## $$ {\rm mean}(x) = \bar{x} = {1\over N} \sum_{i=1}^N x_i $$
24511
4f0e6ee6c9b8 Make documentation Sec 26.1 more consistent and Sec 25.4 clearer (bug #52685)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
39 ## where $N$ is the number of elements of @var{x}.
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
40 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7411
diff changeset
41 ## @ifnottex
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
42 ##
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
43 ## @example
24511
4f0e6ee6c9b8 Make documentation Sec 26.1 more consistent and Sec 25.4 clearer (bug #52685)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
44 ## mean (@var{x}) = SUM_i @var{x}(i) / N
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
45 ## @end example
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10687
diff changeset
46 ##
24985
d85b2485af9e doc: grammarcheck m-files ahead of 4.4 release.
Rik <rik@octave.org>
parents: 24869
diff changeset
47 ## @noindent
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
48 ## where @math{N} is the number of elements in @var{x}.
24511
4f0e6ee6c9b8 Make documentation Sec 26.1 more consistent and Sec 25.4 clearer (bug #52685)
Daniel J Sebald <daniel.sebald@ieee.org>
parents: 23219
diff changeset
49 ##
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7411
diff changeset
50 ## @end ifnottex
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
51 ##
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
52 ## If @var{x} is an array, then @code{mean(@var{x})} computes the mean along
32495
386d05bbae5a doc: Spellcheck documentation ahead of 9.1 release.
Rik <rik@octave.org>
parents: 31882
diff changeset
53 ## the first non-singleton dimension of @var{x}.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
54 ##
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
55 ## The optional variable @var{dim} forces @code{mean} to operate over the
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
56 ## specified dimension, which must be a positive integer-valued number.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
57 ## Specifying any singleton dimension in @var{x}, including any dimension
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
58 ## exceeding @code{ndims (@var{x})}, will result in a mean equal to @var{x}.
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
59 ##
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
60 ## Specifying the dimensions as @var{vecdim}, a vector of non-repeating
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
61 ## dimensions, will return the mean over the array slice defined by
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
62 ## @var{vecdim}. If @var{vecdim} indexes all dimensions of @var{x}, then it is
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
63 ## equivalent to the option @qcode{"all"}. Any dimension in @var{vecdim}
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
64 ## greater than @code{ndims (@var{x})} is ignored.
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
65 ##
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
66 ## Specifying the dimension as @qcode{"all"} will force @code{mean} to operate
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
67 ## on all elements of @var{x}, and is equivalent to @code{mean (@var{x}(:))}.
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
68 ##
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
69 ## The optional input @var{outtype} specifies the data type that is returned.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
70 ## @var{outtype} can take the following values:
4022
789c4112a37d [project @ 2002-08-06 03:42:41 by jwe]
jwe
parents: 3922
diff changeset
71 ##
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
72 ## @table @asis
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
73 ## @item @qcode{'default'} : Output is of type double, unless the input is
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
74 ## single in which case the output is of type single.
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
75 ##
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
76 ## @item @qcode{'double'} : Output is of type double.
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
77 ##
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
78 ## @item @qcode{'native'} : Output is of the same type as the input as reported
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
79 ## by (@code{class (@var{x})}), unless the input is logical in which case the
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
80 ## output is of type double.
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
81 ## @end table
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
82 ##
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
83 ## The optional variable @var{nanflag} specifies whether to include or exclude
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
84 ## NaN values from the calculation using any of the previously specified input
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
85 ## argument combinations. The default value for @var{nanflag} is
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
86 ## @qcode{"includenan"} which keeps NaN values in the calculation. To exclude
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
87 ## NaN values set the value of @var{nanflag} to @qcode{"omitnan"}. The output
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
88 ## will still contain NaN values if @var{x} consists of all NaN values in the
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
89 ## operating dimension.
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
90 ##
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
91 ## @seealso{median, mode, movmean}
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
92 ## @end deftypefn
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
93
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
94 function m = mean (x, varargin)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
95
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
96 if (nargin < 1 || nargin > 4)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
97 print_usage ();
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
98 endif
4022
789c4112a37d [project @ 2002-08-06 03:42:41 by jwe]
jwe
parents: 3922
diff changeset
99
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
100 ## Set initial conditions
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
101 all_flag = false;
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
102 omitnan = false;
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
103 out_flag = false;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
104
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
105 nvarg = numel (varargin);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
106 varg_chars = cellfun ("ischar", varargin);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
107 outtype = "default";
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
108 szx = size (x);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
109 ndx = ndims (x);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
110
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
111 if (nvarg > 1 && ! varg_chars(2:end))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
112 ## Only first varargin can be numeric
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
113 print_usage ();
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
114 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
115
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
116 ## Process any other char arguments.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
117 if (any (varg_chars))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
118 for argin = varargin(varg_chars)
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
119 switch (lower (argin{:}))
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
120 case "all"
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
121 all_flag = true;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
122
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
123 case "omitnan"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
124 omitnan = true;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
125
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
126 case "includenan"
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
127 omitnan = false;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
128
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
129 case "default"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
130 if (out_flag)
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
131 error ("mean: only one OUTTYPE can be specified");
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
132 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
133 if (isa (x, "single"))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
134 outtype = "single";
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
135 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
136 outtype = "double";
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
137 endif
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
138 out_flag = true;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
139
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
140 case "native"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
141 outtype = class (x);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
142 if (out_flag)
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
143 error ("mean: only one OUTTYPE can be specified");
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
144 elseif (strcmp (outtype, "logical"))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
145 outtype = "double";
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
146 elseif (strcmp (outtype, "char"))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
147 error ("mean: OUTTYPE 'native' cannot be used with char inputs");
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
148 endif
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
149 out_flag = true;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
150
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
151 case "double"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
152 if (out_flag)
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
153 error ("mean: only one OUTTYPE can be specified");
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
154 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
155 outtype = "double";
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
156 out_flag = true;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
157
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
158 otherwise
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
159 print_usage ();
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
160 endswitch
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
161 endfor
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
162 varargin(varg_chars) = [];
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
163 nvarg = numel (varargin);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
164 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
165
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
166 if (strcmp (outtype, "default"))
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
167 if (isa (x, "single"))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
168 outtype = "single";
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
169 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
170 outtype = "double";
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
171 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
172 endif
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
173
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
174 if (nvarg > 1 || (nvarg == 1 && ! isnumeric (varargin{1})))
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
175 ## After trimming char inputs can only be one varargin left, must be numeric
11436
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
176 print_usage ();
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
177 endif
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
178
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
179 if (! (isnumeric (x) || islogical (x) || ischar (x)))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
180 error ("mean: X must be either a numeric, boolean, or character array");
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
181 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
182
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
183 ## Process special cases of input/output sizes.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
184 if (nvarg == 0)
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
185 ## Single numeric input argument, no dimensions given.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
186
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
187 if (all_flag)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
188 x = x(:);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
189
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
190 if (omitnan)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
191 x = x(! isnan (x));
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
192 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
193
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
194 if (any (isa (x, {"int64", "uint64"})))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
195 m = int64_mean (x, 1, numel (x), outtype);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
196 else
31872
cfeda68b01ad mean: Process single as double to avoid precision limits (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31870
diff changeset
197 m = sum (x, "double") ./ numel (x);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
198 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
199
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
200 else
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
201 ## Find the first non-singleton dimension.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
202 (dim = find (szx != 1, 1)) || (dim = 1);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
203 n = szx(dim);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
204 if (omitnan)
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
205 idx = isnan (x);
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
206 n = sum (! idx, dim);
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
207 x(idx) = 0;
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
208 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
209
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
210 if (any (isa (x, {"int64", "uint64"})))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
211 m = int64_mean (x, dim, n, outtype);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
212 else
31872
cfeda68b01ad mean: Process single as double to avoid precision limits (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31870
diff changeset
213 m = sum (x, dim, "double") ./ n;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
214 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
215
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
216 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
217
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
218 else
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
219
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
220 ## Two numeric input arguments, dimensions given. Note scalar is vector!
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
221 vecdim = varargin{1};
31882
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
222 if (isempty (vecdim) || ! (isvector (vecdim) && all (vecdim > 0)
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
223 && all (rem (vecdim, 1)==0)))
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
224 error ("mean: DIM must be a positive integer scalar or vector");
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
225 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
226
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
227 if (ndx == 2 && isempty (x) && szx == [0,0])
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
228 ## FIXME: This special case handling could be removed once sum
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
229 ## compatibly handles all sizes of empty inputs.
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
230 sz_out = szx;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
231 sz_out (vecdim(vecdim <= ndx)) = 1;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
232 m = NaN (sz_out);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
233 else
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
234
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
235 if (isscalar (vecdim))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
236 if (vecdim > ndx)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
237 m = x;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
238 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
239 n = szx(vecdim);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
240 if (omitnan)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
241 nanx = isnan (x);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
242 n = sum (! nanx, vecdim);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
243 x(nanx) = 0;
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
244 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
245
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
246 if (any (isa (x, {"int64", "uint64"})))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
247 m = int64_mean (x, vecdim, n, outtype);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
248 else
31872
cfeda68b01ad mean: Process single as double to avoid precision limits (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31870
diff changeset
249 m = sum (x, vecdim, "double") ./ n;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
250 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
251
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
252 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
253
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
254 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
255 vecdim = sort (vecdim);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
256 if (! all (diff (vecdim)))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
257 error ("mean: VECDIM must contain non-repeating positive integers");
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
258 endif
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
259 ## Ignore dimensions in VECDIM larger than actual array.
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
260 vecdim(vecdim > ndims (x)) = [];
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
261
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
262 if (isempty (vecdim))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
263 m = x;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
264 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
265
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
266 ## Calculate permutation vector
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
267 remdims = 1 : ndx; # All dimensions
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
268 remdims(vecdim) = []; # Delete dimensions specified by vecdim
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
269 nremd = numel (remdims);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
270
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
271 ## If all dimensions are given, it is equivalent to 'all' flag
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
272 if (nremd == 0)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
273 x = x(:);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
274 if (omitnan)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
275 x = x(! isnan (x));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
276 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
277
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
278 if (any (isa (x, {"int64", "uint64"})))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
279 m = int64_mean (x, 1, numel (x), outtype);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
280 else
31872
cfeda68b01ad mean: Process single as double to avoid precision limits (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31870
diff changeset
281 m = sum (x, "double") ./ numel (x);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
282 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
283
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
284 else
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
285 ## Permute to push vecdims to back
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
286 perm = [remdims, vecdim];
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
287 x = permute (x, perm);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
288
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
289 ## Reshape to squash all vecdims in final dimension
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
290 sznew = [szx(remdims), prod(szx(vecdim))];
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
291 x = reshape (x, sznew);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
292
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
293 ## Calculate mean on final dimension
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
294 dim = nremd + 1;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
295 if (omitnan)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
296 nanx = isnan (x);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
297 x(nanx) = 0;
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
298 n = sum (! nanx, dim);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
299 else
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
300 n = sznew(dim);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
301 endif
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
302
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
303 if (any (isa (x, {"int64", "uint64"})))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
304 m = int64_mean (x, dim, n, outtype);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
305 else
31872
cfeda68b01ad mean: Process single as double to avoid precision limits (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31870
diff changeset
306 m = sum (x, dim, "double") ./ n;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
307 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
308
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
309 ## Inverse permute back to correct dimensions
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
310 m = ipermute (m, perm);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
311 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
312 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
313 endif
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
314 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
315 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
316
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
317 ## Convert output if necessary
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
318 if (! strcmp (class (m), outtype))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
319 if (! islogical (x))
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
320 m = feval (outtype, m);
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
321 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
322 endif
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
323
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
324 endfunction
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
325
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
326 function m = int64_mean (x, dim, n, outtype)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
327 ## Avoid int overflow in large ints. Smaller ints processed as double
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
328 ## avoids overflow but large int64 values have floating pt error as double.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
329 ## Use integer math and manual remainder correction to avoid this.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
330 if (any (abs (x(:)) >= flintmax / n))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
331 rmdr = double (rem (x, n)) / n;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
332 rmdr_hilo = logical (int8 (rmdr)); # Integer rounding direction indicator
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
333
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
334 ## Do 'native' int summation to prevent double precision error,
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
335 ## then add back in lost round-up/down remainders.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
336
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
337 m = sum (x/n, dim, "native");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
338
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
339 ## rmdr.*!rmdr_hilo = remainders that were rounded down in abs val
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
340 ## signs retained, can be summed and added back.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
341 ## rmdr.*rmdr_hilo = remainders that were rounded up in abs val.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
342 ## need to add back difference between 1 and rmdr, retaining sign.
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
343
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
344 rmdr = sum (rmdr .* !rmdr_hilo, dim) - ...
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
345 sum ((1 - abs (rmdr)) .* rmdr_hilo .* sign (rmdr), dim);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
346
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
347 if (any (abs (m(:)) >= flintmax))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
348 ## Avoid float errors when combining for large m.
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
349 ## FIXME: may also need to include checking rmdr for large numel (x),
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
350 ## as its value could be on the order of numel (x).
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
351 if (any (strcmp (outtype, {"int64", "uint64"})))
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
352 m += rmdr;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
353 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
354 m = double (m) + rmdr;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
355 endif
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
356
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
357 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
358 m = double(m) + rmdr;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
359 switch (outtype)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
360 case "int64"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
361 m = int64 (m);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
362 case "uint64"
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
363 m = uint64 (m);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
364 endswitch
31878
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
365 endif
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
366 else
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
367 m = double (sum (x, dim, "native")) ./ n;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
368 endif
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28929
diff changeset
369
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
370 endfunction
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
371
12656
6b2f14af2360 Overhaul functions in statistics/base directory.
Rik <octave@nomad.inbox5.com>
parents: 12575
diff changeset
372
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
373 %!test
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
374 %! x = -10:10;
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
375 %! y = x';
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
376 %! z = [y, y+10];
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
377 %! assert (mean (x), 0);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
378 %! assert (mean (y), 0);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
379 %! assert (mean (z), [0, 10]);
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
380
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
381 %!assert (mean (magic (3), 1), [5, 5, 5])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
382 %!assert (mean (magic (3), 2), [5; 5; 5])
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
383 %!assert (mean (logical ([1 0 1 1])), 0.75)
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
384 %!assert (mean (single ([1 0 1 1])), single (0.75))
21309
7fbecef105ca Allow statistics functions to work over non-existent dimension (bug #33523).
Rik <rik@octave.org>
parents: 20852
diff changeset
385 %!assert (mean ([1 2], 3), [1 2])
11436
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
386
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
387 ## Test outtype option
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
388 %!test
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
389 %! in = [1 2 3];
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
390 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
391 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
392 %! assert (mean (in, "default"), out);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
393 %! assert (mean (in, "double"), out);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
394 %! assert (mean (in, "native"), out);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
395
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
396 %!test
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
397 %! in = single ([1 2 3]);
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
398 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
399 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
400 %! assert (mean (in, "default"), single (out));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
401 %! assert (mean (in, "double"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
402 %! assert (mean (in, "native"), single (out));
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
403
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
404 %!test
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
405 %! in = logical ([1 0 1]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
406 %! out = 2/3;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
407 %! assert (mean (in, "default"), mean (in), eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
408 %! assert (mean (in, "default"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
409 %! assert (mean (in, "double"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
410 %! assert (mean (in, "native"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
411
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
412 %!test
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
413 %! in = char ("ab");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
414 %! out = 97.5;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
415 %! assert (mean (in, "default"), mean (in), eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
416 %! assert (mean (in, "default"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
417 %! assert (mean (in, "double"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
418
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
419 %!test
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
420 %! in = uint8 ([1 2 3]);
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
421 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
422 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
423 %! assert (mean (in, "default"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
424 %! assert (mean (in, "double"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
425 %! assert (mean (in, "native"), uint8 (out));
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
426
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
427 %!test
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
428 %! in = uint8 ([0 1 2 3]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
429 %! out = 1.5;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
430 %! out_u8 = 2;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
431 %! assert (mean (in, "default"), mean (in), eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
432 %! assert (mean (in, "default"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
433 %! assert (mean (in, "double"), out, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
434 %! assert (mean (in, "native"), uint8 (out_u8));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
435 %! assert (class (mean (in, "native")), "uint8");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
436
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
437 %!test # internal sum exceeding intmax
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
438 %! in = uint8 ([3 141 141 255]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
439 %! out = 135;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
440 %! assert (mean (in, "default"), mean (in));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
441 %! assert (mean (in, "default"), out);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
442 %! assert (mean (in, "double"), out);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
443 %! assert (mean (in, "native"), uint8 (out));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
444 %! assert (class (mean (in, "native")), "uint8");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
445
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
446 %!test # fractional answer with internal sum exceeding intmax
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
447 %! in = uint8 ([1 141 141 255]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
448 %! out = 134.5;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
449 %! out_u8 = 135;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
450 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
451 %! assert (mean (in, "default"), out);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
452 %! assert (mean (in, "double"), out);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
453 %! assert (mean (in, "native"), uint8 (out_u8));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
454 %! assert (class (mean (in, "native")), "uint8");
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
455
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
456 %!test <54567> # large int64 sum exceeding intmax and double precision limit
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
457 %! in_same = uint64 ([intmax("uint64") intmax("uint64")-2]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
458 %! out_same = intmax ("uint64")-1;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
459 %! in_opp = int64 ([intmin("int64"), intmax("int64")-1]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
460 %! out_opp = -1;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
461 %! in_neg = int64 ([intmin("int64") intmin("int64")+2]);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
462 %! out_neg = intmin ("int64")+1;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
463 %!
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
464 %! ## both positive
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
465 %! assert (mean (in_same, "default"), mean (in_same));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
466 %! assert (mean (in_same, "default"), double (out_same));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
467 %! assert (mean (in_same, "double"), double (out_same));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
468 %! assert (mean (in_same, "native"), uint64 (out_same));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
469 %! assert (class (mean (in_same, "native")), "uint64");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
470 %!
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
471 %! ## opposite signs
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
472 %! assert (mean (in_opp, "default"), mean (in_opp));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
473 %! assert (mean (in_opp, "default"), double (out_opp));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
474 %! assert (mean (in_opp, "double"), double (out_opp));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
475 %! assert (mean (in_opp, "native"), int64 (out_opp));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
476 %! assert (class (mean (in_opp, "native")), "int64");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
477 %!
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
478 %! ## both negative
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
479 %! assert (mean (in_neg, "default"), mean (in_neg));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
480 %! assert (mean (in_neg, "default"), double(out_neg));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
481 %! assert (mean (in_neg, "double"), double(out_neg));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
482 %! assert (mean (in_neg, "native"), int64(out_neg));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
483 %! assert (class (mean (in_neg, "native")), "int64");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
484
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
485 ## Additional tests int64 and double precision limits
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
486 %!test <54567>
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
487 %! in = [(intmin('int64')+5), (intmax('int64'))-5];
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
488 %! assert (mean (in, "native"), int64(-1));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
489 %! assert (class (mean (in, "native")), "int64");
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
490 %! assert (mean (double(in)), double(0) );
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
491 %! assert (mean (in), double(-0.5) );
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
492 %! assert (mean (in, "default"), double(-0.5) );
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
493 %! assert (mean (in, "double"), double(-0.5) );
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
494 %! assert (mean (in, "all", "native"), int64(-1));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
495 %! assert (mean (in, 2, "native"), int64(-1));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
496 %! assert (mean (in, [1 2], "native"), int64(-1));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
497 %! assert (mean (in, [2 3], "native"), int64(-1));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
498 %! assert (mean ([intmin("int64"), in, intmax("int64")]), double(-0.5))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
499 %! assert (mean ([in; int64([1 3])], 2, "native"), int64([-1; 2]));
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
500
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
501 ## Test input and optional arguments "all", DIM, "omitnan".
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
502 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
503 %! x = [-10:10];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
504 %! y = [x;x+5;x-5];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
505 %! assert (mean (x), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
506 %! assert (mean (y, 2), [0, 5, -5]');
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
507 %! assert (mean (y, "all"), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
508 %! y(2,4) = NaN;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
509 %! assert (mean (y', "omitnan"), [0 5.35 -5]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
510 %! z = y + 20;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
511 %! assert (mean (z, "all"), NaN);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
512 %! assert (mean (z, "all", "includenan"), NaN);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
513 %! assert (mean (z, "all", "omitnan"), 20.03225806451613, 4e-14);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
514 %! m = [20 NaN 15];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
515 %! assert (mean (z'), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
516 %! assert (mean (z', "includenan"), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
517 %! m = [20 25.35 15];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
518 %! assert (mean (z', "omitnan"), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
519 %! assert (mean (z, 2, "omitnan"), m');
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
520 %! assert (mean (z, 2, "native", "omitnan"), m');
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
521 %! assert (mean (z, 2, "omitnan", "native"), m');
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
522
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
523 ## Test boolean input
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
524 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
525 %! assert (mean (true, "all"), 1);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
526 %! assert (mean (false), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
527 %! assert (mean ([true false true]), 2/3, 4e-14);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
528 %! assert (mean ([true false true], 1), [1 0 1]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
529 %! assert (mean ([true false NaN], 1), [1 0 NaN]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
530 %! assert (mean ([true false NaN], 2), NaN);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
531 %! assert (mean ([true false NaN], 2, "omitnan"), 0.5);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
532 %! assert (mean ([true false NaN], 2, "omitnan", "native"), 0.5);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
533
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
534 ## Test char inputs
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
535 %!assert (mean ("abc"), double (98))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
536 %!assert (mean ("ab"), double (97.5), eps)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
537 %!assert (mean ("abc", "double"), double (98))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
538 %!assert (mean ("abc", "default"), double (98))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
539
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
540 ## Test NaN inputs
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
541 %!test
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
542 %! x = magic (4);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
543 %! x([2, 9:12]) = NaN;
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
544 %! assert (mean (x), [NaN 8.5, NaN, 8.5], eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
545 %! assert (mean (x,1), [NaN 8.5, NaN, 8.5], eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
546 %! assert (mean (x,2), NaN(4,1), eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
547 %! assert (mean (x,3), x, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
548 %! assert (mean (x, 'omitnan'), [29/3, 8.5, NaN, 8.5], eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
549 %! assert (mean (x, 1, 'omitnan'), [29/3, 8.5, NaN, 8.5], eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
550 %! assert (mean (x, 2, 'omitnan'), [31/3; 9.5; 28/3; 19/3], eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
551 %! assert (mean (x, 3, 'omitnan'), x, eps);
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
552
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
553 ## Test empty inputs
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
554 %!assert (mean ([]), NaN(1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
555 %!assert (mean (single([])), NaN(1,1,"single"))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
556 %!assert (mean ([], 1), NaN(1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
557 %!assert (mean ([], 2), NaN(0,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
558 %!assert (mean ([], 3), NaN(0,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
559 %!assert (mean (ones(1,0)), NaN(1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
560 %!assert (mean (ones(1,0), 1), NaN(1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
561 %!assert (mean (ones(1,0), 2), NaN(1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
562 %!assert (mean (ones(1,0), 3), NaN(1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
563 %!assert (mean (ones(0,1)), NaN(1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
564 %!assert (mean (ones(0,1), 1), NaN(1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
565 %!assert (mean (ones(0,1), 2), NaN(0,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
566 %!assert (mean (ones(0,1), 3), NaN(0,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
567 %!assert (mean (ones(0,1,0)), NaN(1,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
568 %!assert (mean (ones(0,1,0), 1), NaN(1,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
569 %!assert (mean (ones(0,1,0), 2), NaN(0,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
570 %!assert (mean (ones(0,1,0), 3), NaN(0,1,1))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
571 %!assert (mean (ones(0,0,1,0)), NaN(1,0,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
572 %!assert (mean (ones(0,0,1,0), 1), NaN(1,0,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
573 %!assert (mean (ones(0,0,1,0), 2), NaN(0,1,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
574 %!assert (mean (ones(0,0,1,0), 3), NaN(0,0,1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
575
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
576 ## Test dimension indexing with vecdim in N-dimensional arrays
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
577 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
578 %! x = repmat ([1:20;6:25], [5 2 6 3]);
31623
59422a6fbd91 mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents: 31533
diff changeset
579 %! assert (size (mean (x, [3 2])), [10 1 1 3]);
59422a6fbd91 mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents: 31533
diff changeset
580 %! assert (size (mean (x, [1 2])), [1 1 6 3]);
59422a6fbd91 mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents: 31533
diff changeset
581 %! assert (size (mean (x, [1 2 4])), [1 1 6]);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
582 %! assert (size (mean (x, [1 4 3])), [1 40]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
583 %! assert (size (mean (x, [1 2 3 4])), [1 1]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
584
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
585 ## Test exceeding dimensions
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
586 %!assert (mean (ones (2,2), 3), ones (2,2))
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
587 %!assert (mean (ones (2,2,2), 99), ones (2,2,2))
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
588 %!assert (mean (magic (3), 3), magic (3))
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
589 %!assert (mean (magic (3), [1 3]), [5, 5, 5])
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
590 %!assert (mean (magic (3), [1 99]), [5, 5, 5])
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
591
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
592 ## Test results with vecdim in n-dimensional arrays and "omitnan"
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
593 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
594 %! x = repmat ([1:20;6:25], [5 2 6 3]);
31623
59422a6fbd91 mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents: 31533
diff changeset
595 %! m = repmat ([10.5;15.5], [5 1 1 3]);
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
596 %! assert (mean (x, [3 2]), m, 4e-14);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
597 %! x(2,5,6,3) = NaN;
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
598 %! m(2,1,1,3) = NaN;
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
599 %! assert (mean (x, [3 2]), m, 4e-14);
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
600 %! m(2,1,1,3) = 15.52301255230125;
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
601 %! assert (mean (x, [3 2], "omitnan"), m, 4e-14);
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
602
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
603 ## Test input case insensitivity
31870
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
604 %!assert (mean ([1 2 3], "aLL"), 2)
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
605 %!assert (mean ([1 2 3], "OmitNan"), 2)
6a2638cbea96 maint: Update code in cset c6eeb8b44c28 to use Octave core coding conventions (patch #10314).
Rik <rik@octave.org>
parents: 31868
diff changeset
606 %!assert (mean ([1 2 3], "DOUBle"), 2)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
607
31878
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
608 ## Test limits of single precision summation limits on each code path
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
609 %!assert <*63848> (mean (ones (80e6, 1, "single")), 1, eps)
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
610 %!assert <*63848> (mean (ones (80e6, 1, "single"), "all"), 1, eps)
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
611 %!assert <*63848> (mean (ones (80e6, 1, "single"), 1), 1, eps)
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
612 %!assert <*63848> (mean (ones (80e6, 1, "single"), [1 2]), 1, eps)
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
613 %!assert <*63848> (mean (ones (80e6, 1, "single"), [1 3]), 1, eps)
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
614
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
615 ## Test limits of double precision summation
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
616 %!assert <63848> (mean ([flintmax("double"), ones(1, 2^8-1, "double")]), ...
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
617 %! 35184372088833-1/(2^8), eps(35184372088833))
942ca5f2c71c mean: Process single as double to avoid precision limits on stable (bug #63848).
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
618
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
619 ## Test input validation
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
620 %!error <Invalid call to mean. Correct usage is> mean ()
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
621 %!error <Invalid call to mean. Correct usage is> mean (1, 2, 3)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
622 %!error <Invalid call to mean. Correct usage is> mean (1, 2, 3, 4)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
623 %!error <Invalid call to mean. Correct usage is> mean (1, "all", 3)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
624 %!error <Invalid call to mean. Correct usage is> mean (1, "b")
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
625 %!error <Invalid call to mean. Correct usage is> mean (1, 1, "foo")
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
626 %!error <OUTTYPE 'native' cannot be used with char> mean ("abc", "native")
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
627 %!error <X must be either a numeric, boolean, or character> mean ({1:5})
31511
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
628 %!error <DIM must be a positive integer> mean (1, ones (2,2))
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
629 %!error <DIM must be a positive integer> mean (1, 1.5)
9ee8943cad01 mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents: 31421
diff changeset
630 %!error <DIM must be a positive integer> mean (1, 0)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
631 %!error <DIM must be a positive integer> mean (1, [])
31882
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
632 %!error <DIM must be a positive integer> mean (1, -1)
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
633 %!error <DIM must be a positive integer> mean (1, -1.5)
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
634 %!error <DIM must be a positive integer> mean (1, NaN)
3bdfda4f7c16 mean.m: correct regression on default on dim error (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31879
diff changeset
635 %!error <DIM must be a positive integer> mean (1, Inf)
31868
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
636 %!error <DIM must be a positive integer> mean (repmat ([1:20;6:25], [5 2]), -1)
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
637 %!error <DIM must be a positive integer> mean (repmat ([1:5;5:9], [5 2]), [1 -1])
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
638 %!error <DIM must be a positive integer> mean (1, ones(1,0))
c6eeb8b44c28 Port statistics pkg mean, median, var, & std into core (patch #10314)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31706
diff changeset
639 %!error <VECDIM must contain non-repeating> mean (1, [2 2])