annotate scripts/statistics/mean.m @ 31421:21962c678648

mean.m: more Matlab compatibility (bugs #58116, #50571). Background: This improved function was released with the Statistics Package. * scripts/statistics/mean.m: now accepts vector dimensions and options to handle `NaN` values. The option `"a"` (arithmetic mean), `"g"` (geometric mean), and `"h"` (harmonic mean) are no longer accepted, only the arithmetic mean is computed. For the geometric and harmonic mean, please use respective functions `geomean` and `harmmean` from the Octave Statistics package. * etc/NEWS.8.md: announce changes. Co-authored-by: Kai T. Ohlhus <k.ohlhus@gmail.com>
author Andreas Bertsatos <abertsatos@biol.uoa.gr>
date Sun, 13 Nov 2022 01:44:54 +0900
parents 5d3faba0342e
children 9ee8943cad01
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 ##
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
3 ## Copyright (C) 1995-2022 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 -*-
30875
5d3faba0342e doc: Ensure documentation lists output argument when it exists for all m-files.
Rik <rik@octave.org>
parents: 30564
diff changeset
27 ## @deftypefn {} {@var{y} =} mean (@var{x})
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
28 ## @deftypefnx {} {@var{y} =} mean (@var{x}, "all")
30875
5d3faba0342e doc: Ensure documentation lists output argument when it exists for all m-files.
Rik <rik@octave.org>
parents: 30564
diff changeset
29 ## @deftypefnx {} {@var{y} =} mean (@var{x}, @var{dim})
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
30 ## @deftypefnx {} {@var{y} =} mean (@var{x}, @var{vecdim})
30875
5d3faba0342e doc: Ensure documentation lists output argument when it exists for all m-files.
Rik <rik@octave.org>
parents: 30564
diff changeset
31 ## @deftypefnx {} {@var{y} =} mean (@dots{}, @var{outtype})
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
32 ## @deftypefnx {} {@var{y} =} mean (@dots{}, @var{nanflag})
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 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
35 ## @itemize
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
36 ## @item
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
37 ## If @var{x} is a vector, then @code{mean(@var{x})} returns the
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
38 ## mean of the elements in @var{x} defined as
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
39 ## @tex
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
40 ## $$ {\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
41 ## where $N$ is the number of elements of @var{x}.
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
42 ##
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
43 ## @end tex
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7411
diff changeset
44 ## @ifnottex
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
45 ##
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
46 ## @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
47 ## 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
48 ## @end example
10821
693e22af08ae Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents: 10687
diff changeset
49 ##
24985
d85b2485af9e doc: grammarcheck m-files ahead of 4.4 release.
Rik <rik@octave.org>
parents: 24869
diff changeset
50 ## @noindent
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
51 ## where @math{N} is the length of the @var{x} vector.
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
52 ##
8517
81d6ab3ac93c Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents: 7411
diff changeset
53 ## @end ifnottex
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
54 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
55 ## @item
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
56 ## If @var{x} is a matrix, then @code{mean(@var{x})} returns a row vector
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
57 ## with the mean of each columns in @var{x}.
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
58 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
59 ## @item
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
60 ## If @var{x} is a multidimensional array, then @code{mean(@var{x})}
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
61 ## operates along the first nonsingleton dimension of @var{x}.
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
62 ## @end itemize
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
63 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
64 ## @code{mean(@var{x}, "all")} returns the mean of all the elements in @var{x}.
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
65 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
66 ## @code{mean(@var{x}, @var{dim})} returns the mean along the
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
67 ## operating dimension @var{dim} of @var{x}.
4022
789c4112a37d [project @ 2002-08-06 03:42:41 by jwe]
jwe
parents: 3922
diff changeset
68 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
69 ## @code{mean(@var{x}, @var{vecdim})} returns the mean over the
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
70 ## dimensions specified in the vector @var{vecdim}. For example, if @var{x}
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
71 ## is a 2-by-3-by-4 array, then @code{mean(@var{x}, [1 2])} returns a 1-by-4
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
72 ## array. Each element of the output array is the mean of the elements on
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
73 ## the corresponding page of @var{x}. NOTE! @var{vecdim} MUST index at least
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
74 ## N-2 dimensions of @var{x}, where @code{N = length (size (@var{x}))} and
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
75 ## N < 8. If @var{vecdim} indexes all dimensions of @var{x}, then it is
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
76 ## equivalent to @code{mean(@var{x}, "all")}.
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 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
78 ## @code{mean(@dots{}, @var{outtype})} returns the mean with a specified data
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
79 ## type, using any of the input arguments in the previous syntaxes.
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
80 ## @var{outtype} can be "default", "double", or "native".
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
81 ##
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
82 ## @code{mean(@dots{}, @var{nanflag})} specifies whether to exclude NaN values
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
83 ## from the calculation, using any of the input argument combinations in
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
84 ## previous syntaxes. By default, NaN values are included in the calculation
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
85 ## (@var{nanflag} has the value "includenan"). To exclude NaN values, set the
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
86 ## value of @var{nanflag} to "omitnan".
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
87 ##
12575
d0b799dafede Grammarcheck files for 3.4.1 release.
Rik <octave@nomad.inbox5.com>
parents: 12454
diff changeset
88 ## @seealso{median, mode}
3367
0748b03c3510 [project @ 1999-11-20 14:52:38 by jwe]
jwe
parents: 3265
diff changeset
89 ## @end deftypefn
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
90
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
91 function y = mean (x, varargin)
4022
789c4112a37d [project @ 2002-08-06 03:42:41 by jwe]
jwe
parents: 3922
diff changeset
92
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
93 if (nargin < 1 || nargin > 4 || any (cellfun (@isnumeric, varargin(2:end))))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
94 print_usage ();
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
95 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
96
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
97 ## Check all char arguments.
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
98 all_flag = false;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
99 omitnan = false;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
100 outtype = "default";
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
101
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
102 for i = 1:length (varargin)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
103 if (ischar (varargin{i}))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
104 switch (varargin{i})
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
105 case "all"
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
106 all_flag = true;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
107 case "omitnan"
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
108 omitnan = true;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
109 case "includenan"
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
110 omitnan = false;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
111 case {"default", "double", "native"}
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
112 outtype = varargin{i};
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
113 otherwise
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
114 print_usage ();
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
115 endswitch
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
116 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
117 endfor
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
118 varargin(cellfun (@ischar, varargin)) = [];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
119
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
120 if (((length (varargin) == 1) && ! (isnumeric (varargin{1}))) ...
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
121 || (length (varargin) > 1))
11436
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
122 print_usage ();
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
123 endif
e151e23f73bc Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents: 10821
diff changeset
124
12435
0f21f258aa17 mean: also accept logical values
John W. Eaton <jwe@octave.org>
parents: 11595
diff changeset
125 if (! (isnumeric (x) || islogical (x)))
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
126 error ("mean: X must be either a numeric or boolean vector or matrix");
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
127 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
128
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
129 if (length (varargin) == 0)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
130
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
131 ## Single numeric input argument, no dimensions given.
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
132 if (all_flag)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
133 n = length (x(:));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
134 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
135 n = length (x(! isnan (x)));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
136 x(isnan (x)) = 0;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
137 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
138 y = sum (x(:), 1) ./ n;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
139 else
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
140 sz = size (x);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
141 dim = find (sz > 1, 1);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
142 if length (dim) == 0
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
143 dim = 1;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
144 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
145 n = size (x, dim);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
146 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
147 n = sum (! isnan (x), dim);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
148 x(isnan (x)) = 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
149 endif
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
150 y = sum (x, dim) ./ n;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
151 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
152
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
153 else
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
154
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
155 ## Two numeric input arguments, dimensions given. Note scalar is vector!
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
156 vecdim = varargin{1};
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
157 if (! (isvector (vecdim) && all (vecdim)) || any (rem (vecdim, 1)))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
158 error ("mean: Dimension must be a positive integer scalar or vector");
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
159 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
160
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
161 if (isscalar (vecdim))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
162
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
163 n = size (x, vecdim);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
164 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
165 n = sum (! isnan (x), vecdim);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
166 x(isnan (x)) = 0;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
167 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
168 y = sum (x, vecdim) ./ n;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
169
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
170 else
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
171
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
172 sz = size (x);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
173 ndims = length (sz);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
174 misdim = [1:ndims];
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
175
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
176 ## keep remaining dimensions
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
177 for i = 1:length (vecdim)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
178 misdim(misdim == vecdim(i)) = [];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
179 endfor
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
180
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
181 switch (length (misdim))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
182 ## if all dimensions are given, compute x(:)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
183 case 0
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
184 n = length (x(:));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
185 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
186 n = length (x(! isnan (x)));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
187 x(isnan (x)) = 0;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
188 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
189 y = sum (x(:), 1) ./ n;
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
190
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
191 ## for 1 dimension left, return column vector
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
192 case 1
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
193 x = permute (x, [misdim, vecdim]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
194 for i = 1:size (x, 1)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
195 x_vec = x(i,:,:,:,:,:,:)(:);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
196 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
197 x_vec = x_vec(! isnan (x_vec));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
198 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
199 y(i) = sum (x_vec, 1) ./ length (x_vec);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
200 endfor
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
201
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
202 ## for 2 dimensions left, return matrix
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
203 case 2
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
204 x = permute (x, [misdim, vecdim]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
205 for i = 1:size (x, 1)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
206 for j = 1:size (x, 2)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
207 x_vec = x(i,j,:,:,:,:,:)(:);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
208 if (omitnan)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
209 x_vec = x_vec(! isnan (x_vec));
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
210 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
211 y(i,j) = sum (x_vec, 1) ./ length (x_vec);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
212 endfor
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
213 endfor
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
214
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
215 ## for more that 2 dimensions left, print usage
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
216 otherwise
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
217 error ("vecdim must index at least N-2 dimensions of X");
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
218 endswitch
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
219 endif
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
220
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
221 endif
3426
f8dde1807dee [project @ 2000-01-13 08:40:00 by jwe]
jwe
parents: 3367
diff changeset
222
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
223 ## Convert output as requested
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
224 switch (outtype)
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
225 case "default"
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
226 ## do nothing, the operators already do the right thing
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
227 case "double"
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
228 y = double (y);
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
229 case "native"
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
230 if (! islogical (x))
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
231 y = cast (y, class (x));
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
232 endif
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
233 otherwise
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
234 error ("mean: OUTTYPE '%s' not recognized", outtype);
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
235 endswitch
28945
6e460773bdda maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents: 28929
diff changeset
236
3200
781c930425fd [project @ 1998-10-29 05:23:08 by jwe]
jwe
parents:
diff changeset
237 endfunction
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
238
12656
6b2f14af2360 Overhaul functions in statistics/base directory.
Rik <octave@nomad.inbox5.com>
parents: 12575
diff changeset
239
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
240 %!test
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
241 %! x = -10:10;
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
242 %! y = x';
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
243 %! 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
244 %! assert (mean (x), 0);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
245 %! assert (mean (y), 0);
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
246 %! assert (mean (z), [0, 10]);
7411
83a8781b529d [project @ 2008-01-22 21:52:25 by jwe]
jwe
parents: 7017
diff changeset
247
14363
f3d52523cde1 Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents: 14138
diff changeset
248 %!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
249 %!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
250 %!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
251 %!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
252 %!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
253
19833
9fc020886ae9 maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents: 19697
diff changeset
254 ## Test input validation
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
255 %!error <Invalid call to mean. Correct usage is> mean ()
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
256 %!error <Invalid call to mean. Correct usage is> mean (1, 2, 3)
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
257 %!error <Invalid call to mean. Correct usage is> mean (1, 2, 3, 4)
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
258 %!error <Invalid call to mean. Correct usage is> mean (1, "all", 3)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
259 %!error <Invalid call to mean. Correct usage is> mean (1, "b")
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
260 %!error <Invalid call to mean. Correct usage is> mean (1, 1, "foo")
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
261 %!error <X must be either a numeric or boolean> mean ({1:5})
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
262 %!error <X must be either a numeric or boolean> mean ("char")
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
263 %!error <Dimension must be a positive integer> mean (1, ones (2,2))
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
264 %!error <Dimension must be a positive integer> mean (1, 1.5)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
265 %!error <Dimension must be a positive integer> mean (1, 0)
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
266 %!error <vecdim must index at least N-2 dimensions of X> ...
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
267 %! mean (repmat ([1:20;6:25], [5 2 6 3 5]), [1 2])
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
268
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
269 ## 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
270 %!test
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
271 %! 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
272 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
273 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
274 %! assert (mean (in, "default"), out);
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
275 %!
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
276 %! 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
277 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
278 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
279 %! assert (mean (in, "default"), single (out));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
280 %! assert (mean (in, "double"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
281 %! assert (mean (in, "native"), single (out));
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
282 %!
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
283 %! 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
284 %! out = 2;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
285 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
286 %! assert (mean (in, "default"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
287 %! assert (mean (in, "double"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
288 %! assert (mean (in, "native"), uint8 (out));
24869
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
289 %!
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
290 %! in = logical ([1 0 1]);
170e8625562a mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents: 24547
diff changeset
291 %! out = 2/3;
28929
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
292 %! assert (mean (in, "default"), mean (in));
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
293 %! assert (mean (in, "default"), out);
9e43deb9bfc3 maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents: 27984
diff changeset
294 %! assert (mean (in, "native"), out); # logical ignores native option
31421
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
295
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
296 ## Test single input and optional arguments "all", DIM, "omitnan")
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
297 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
298 %! x = [-10:10];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
299 %! 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
300 %! assert (mean (x), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
301 %! 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
302 %! assert (mean (y, "all"), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
303 %! y(2,4) = NaN;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
304 %! 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
305 %! z = y + 20;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
306 %! assert (mean (z, "all"), NaN);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
307 %! m = [20 NaN 15];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
308 %! assert (mean (z'), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
309 %! assert (mean (z', "includenan"), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
310 %! m = [20 25.35 15];
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
311 %! assert (mean (z', "omitnan"), m);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
312 %! 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
313 %! 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
314 %! 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
315
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
316 ## Test boolean input
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
317 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
318 %! assert (mean (true, "all"), 1);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
319 %! assert (mean (false), 0);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
320 %! 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
321 %! 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
322 %! 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
323 %! 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
324 %! 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
325 %! 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
326
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
327 ## Test dimension indexing with vecdim in n-dimensional arrays
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
328 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
329 %! x = repmat ([1:20;6:25], [5 2 6 3]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
330 %! assert (size (mean (x, [3 2])), [10 3]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
331 %! assert (size (mean (x, [1 2])), [6 3]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
332 %! assert (size (mean (x, [1 2 4])), [1 6]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
333 %! 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
334 %! 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
335
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
336 ## Test results with vecdim in n-dimensional arrays and "omitnan"
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
337 %!test
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
338 %! x = repmat ([1:20;6:25], [5 2 6 3]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
339 %! m = repmat ([10.5;15.5], [5,3]);
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
340 %! 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
341 %! x(2,5,6,3) = NaN;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
342 %! m(2,3) = NaN;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
343 %! 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
344 %! m(2,3) = 15.52301255230125;
21962c678648 mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents: 30875
diff changeset
345 %! assert (mean (x, [3 2], "omitnan"), m, 4e-14);