Mercurial > octave
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 |
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 | 7 ## |
3922 | 8 ## This file is part of Octave. |
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 | 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 | 14 ## |
3922 | 15 ## Octave is distributed in the hope that it will be useful, but |
3200 | 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 | 19 ## |
3200 | 20 ## You should have received a copy of the GNU General Public License |
7016 | 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 | 25 |
3367 | 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 | 39 ## @tex |
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 | 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 | 45 ## |
3367 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 89 ## @end deftypefn |
3426 | 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 | 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 | 127 endif |
3426 | 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 | 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 | 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 | 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 | 237 endfunction |
7411 | 238 |
12656
6b2f14af2360
Overhaul functions in statistics/base directory.
Rik <octave@nomad.inbox5.com>
parents:
12575
diff
changeset
|
239 |
7411 | 240 %!test |
241 %! x = -10:10; | |
242 %! y = x'; | |
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 | 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); |