Mercurial > octave
annotate scripts/statistics/mean.m @ 31623:59422a6fbd91 stable
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
* mean.m: Accept large DIM inputs by removing any dimensions larger than the
dimensions of the input array. Use vectorized operations, rather than for
loop, for this input validation. Pre-declare output array before for loop
for performance. Use ipermute() after calculations to return
correctly-dimensioned result (checked with Matlab). Change BIST tests results
to match correct behavior.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 02 Dec 2022 21:34:15 -0800 |
parents | c154cc05cd1f |
children | 597f3ee61a48 |
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}) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
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}) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
30 ## @deftypefnx {} {@var{y} =} mean (@dots{}, '@var{outtype}') |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
31 ## @deftypefnx {} {@var{y} =} mean (@dots{}, '@var{nanflag}') |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
32 ## 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
|
33 ## |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
34 ## @itemize |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
35 ## @item |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
36 ## If @var{x} is a vector, then @code{mean (@var{x})} returns the |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
37 ## mean of the elements in @var{x} defined as |
3367 | 38 ## @tex |
39 ## $$ {\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
|
40 ## 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
|
41 ## |
3367 | 42 ## @end tex |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7411
diff
changeset
|
43 ## @ifnottex |
3426 | 44 ## |
3367 | 45 ## @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
|
46 ## mean (@var{x}) = SUM_i @var{x}(i) / N |
3367 | 47 ## @end example |
10821
693e22af08ae
Grammarcheck documentation of m-files
Rik <octave@nomad.inbox5.com>
parents:
10687
diff
changeset
|
48 ## |
24985
d85b2485af9e
doc: grammarcheck m-files ahead of 4.4 release.
Rik <rik@octave.org>
parents:
24869
diff
changeset
|
49 ## @noindent |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
50 ## where @math{N} is the number of elements in the @var{x} vector. |
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 ## |
8517
81d6ab3ac93c
Allow documentation tobe built for other formats than tex and info
sh@sh-laptop
parents:
7411
diff
changeset
|
52 ## @end ifnottex |
3200 | 53 ## |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
54 ## @item |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
55 ## If @var{x} is a matrix, then @code{mean} returns a row vector with the mean |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
56 ## of each column in @var{x}. |
3367 | 57 ## |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
58 ## @item |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
59 ## If @var{x} is a multi-dimensional array, then @code{mean} operates along the |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
60 ## first non-singleton dimension of @var{x}. |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
61 ## @end itemize |
3367 | 62 ## |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
63 ## The optional input @var{dim} forces @code{mean} to operate over the |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
64 ## specified dimension(s). @var{dim} can either be a scalar dimension or a |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
65 ## vector of non-repeating dimensions. Dimensions must be positive integers, |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
66 ## and the mean is calculated over the array slice defined by @var{dim}. |
3367 | 67 ## |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
68 ## Specifying dimension @qcode{"all"} will force @code{mean} to operate on all |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
69 ## elements of @var{x}, and is equivalent to @code{mean (@var{x}(:))}. |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
70 ## |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
71 ## The optional input @var{outtype} specifies the data type that is returned. |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
72 ## Valid values are: |
4022 | 73 ## |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
74 ## @table @asis |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
75 ## @item @qcode{'default'} : Output is of type double, unless the input is |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
76 ## single in which case the output is of type single. |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
77 ## |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
78 ## @item @qcode{'double'} : Output is of type double. |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
79 ## |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
80 ## @item @qcode{'native'} : Output is of the same type as the input |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
81 ## (@code{class (@var{x})}), unless the input is logical in which case the |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
82 ## output is of type double. |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
83 ## |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
84 ## @end table |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
85 ## |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
86 ## The optional input @var{nanflag} specifies whether to include/exclude NaN |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
87 ## values from the calculation. By default, NaN values are included in the |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
88 ## calculation (@var{nanflag} has the value @qcode{'includenan'}). To exclude |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
89 ## NaN values, set the value of @var{nanflag} to @qcode{'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
|
90 ## |
12575
d0b799dafede
Grammarcheck files for 3.4.1 release.
Rik <octave@nomad.inbox5.com>
parents:
12454
diff
changeset
|
91 ## @seealso{median, mode} |
3367 | 92 ## @end deftypefn |
3426 | 93 |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
94 function y = mean (x, varargin) |
4022 | 95 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
96 if (nargin < 1 || nargin > 4 || ! all (cellfun (@ischar, varargin(2:end)))) |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
97 print_usage (); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
98 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
99 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
100 ## Check all char arguments. |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
101 all_flag = false; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
102 omitnan = false; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
103 outtype = "default"; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
104 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
105 for i = 1:numel (varargin) |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
106 if (ischar (varargin{i})) |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
107 switch (varargin{i}) |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
108 case "all" |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
109 all_flag = true; |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
110 case "includenan" |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
111 omitnan = false; |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
112 case "omitnan" |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
113 omitnan = true; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
114 case {"default", "double", "native"} |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
115 outtype = varargin{i}; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
116 otherwise |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
117 print_usage (); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
118 endswitch |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
119 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
120 endfor |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
121 varargin(cellfun (@ischar, varargin)) = []; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
122 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
123 if (((numel (varargin) == 1) && ! (isnumeric (varargin{1}))) ... |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
124 || (numel (varargin) > 1)) |
11436
e151e23f73bc
Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
125 print_usage (); |
e151e23f73bc
Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
126 endif |
e151e23f73bc
Overhaul base statistics functions and documentation of same.
Rik <octave@nomad.inbox5.com>
parents:
10821
diff
changeset
|
127 |
12435
0f21f258aa17
mean: also accept logical values
John W. Eaton <jwe@octave.org>
parents:
11595
diff
changeset
|
128 if (! (isnumeric (x) || islogical (x))) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
129 error ("mean: X must be either a numeric or logical vector or matrix"); |
3200 | 130 endif |
3426 | 131 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
132 if (numel (varargin) == 0) |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
133 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
134 ## 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
|
135 if (all_flag) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
136 n = numel (x(:)); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
137 if (omitnan) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
138 idx = isnan (x); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
139 n -= sum (idx(:)); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
140 x(idx) = 0; |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
141 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
142 y = sum (x(:), 1) ./ n; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
143 else |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
144 sz = size (x); |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
145 ## Find the first non-singleton dimension. |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
146 (dim = find (sz != 1, 1)) || (dim = 1); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
147 n = size (x, dim); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
148 if (omitnan) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
149 idx = isnan (x); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
150 n = sum (! idx, dim); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
151 x(idx) = 0; |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
152 endif |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
153 y = sum (x, dim) ./ n; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
154 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
155 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
156 else |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
157 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
158 ## Two numeric input arguments, dimensions given. Note scalar is vector! |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
159 dim = varargin{1}; |
31533
c154cc05cd1f
mean.m: Improve clarity and performance of input validation (bug #63410)
Rik <rik@octave.org>
parents:
31525
diff
changeset
|
160 if (! (isvector (dim) && all (dim > 0) && all (rem (dim, 1) == 0))) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
161 error ("mean: DIM must be a positive integer scalar or vector"); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
162 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
163 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
164 if (isscalar (dim)) |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
165 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
166 n = size (x, dim); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
167 if (omitnan) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
168 idx = isnan (x); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
169 n = sum (! idx, dim); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
170 x(idx) = 0; |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
171 endif |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
172 y = sum (x, dim) ./ n; |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
173 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
174 else |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
175 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
176 sz = size (x); |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
177 ndims = numel (sz); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
178 misdim = [1:ndims]; |
3200 | 179 |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
180 dim(dim > ndims) = []; # weed out dimensions larger than array |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
181 misdim(dim) = []; # remove dims asked for leaving missing dims |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
182 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
183 switch (numel (misdim)) |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
184 ## 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
|
185 case 0 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
186 n = numel (x(:)); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
187 if (omitnan) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
188 idx = isnan (x); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
189 n -= sum (idx(:)); |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
190 x(idx) = 0; |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
191 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
192 y = sum (x(:), 1) ./ n; |
3426 | 193 |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
194 ## 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
|
195 case 1 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
196 x = permute (x, [misdim, dim]); |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
197 y = zeros (size (x, 1), 1, "like", x); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
198 for i = 1:size (x, 1) |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
199 x_vec = x(i,:)(:); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
200 if (omitnan) |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
201 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
|
202 endif |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
203 y(i) = sum (x_vec, 1) ./ numel (x_vec); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
204 endfor |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
205 y = ipermute (y, [misdim, dim]); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
206 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
207 ## 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
|
208 case 2 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
209 x = permute (x, [misdim, dim]); |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
210 y = zeros (size (x, 1), size (x, 2), "like", x); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
211 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
|
212 for j = 1:size (x, 2) |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
213 x_vec = x(i,j,:)(:); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
214 if (omitnan) |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
215 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
|
216 endif |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
217 y(i,j) = sum (x_vec, 1) ./ numel (x_vec); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
218 endfor |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
219 endfor |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
220 y = ipermute (y, [misdim, dim]); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
221 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
222 ## for more than 2 dimensions left, throw error |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
223 otherwise |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
224 error ("DIM must index at least N-2 dimensions of X"); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
225 endswitch |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
226 endif |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
227 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
228 endif |
3426 | 229 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
230 ## Convert output if requested |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
231 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
|
232 case "default" |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
233 ## do nothing, the operators already do the right thing. |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
234 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
|
235 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
|
236 case "native" |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
237 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
|
238 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
|
239 endif |
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
240 otherwise |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
241 ## FIXME: This is unreachable code. Valid values already |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
242 ## checked in input validation. |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
243 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
|
244 endswitch |
28945
6e460773bdda
maint: Use newlines after "function" and before "endfunction" for clarity.
Rik <rik@octave.org>
parents:
28929
diff
changeset
|
245 |
3200 | 246 endfunction |
7411 | 247 |
12656
6b2f14af2360
Overhaul functions in statistics/base directory.
Rik <octave@nomad.inbox5.com>
parents:
12575
diff
changeset
|
248 |
7411 | 249 %!test |
250 %! x = -10:10; | |
251 %! y = x'; | |
252 %! 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
|
253 %! assert (mean (x), 0); |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
254 %! assert (mean (y), 0); |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
255 %! assert (mean (z), [0, 10]); |
7411 | 256 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
257 %!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
|
258 %!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
|
259 %!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
|
260 %!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
|
261 %!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
|
262 |
24869
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
263 ## 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
|
264 %!test |
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
265 %! 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
|
266 %! out = 2; |
28929
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
267 %! assert (mean (in, "default"), mean (in)); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
268 %! 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
|
269 %! |
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
270 %! 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
|
271 %! out = 2; |
28929
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
272 %! assert (mean (in, "default"), mean (in)); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
273 %! assert (mean (in, "default"), single (out)); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
274 %! assert (mean (in, "double"), out); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
275 %! 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
|
276 %! |
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
277 %! 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
|
278 %! out = 2; |
28929
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
279 %! assert (mean (in, "default"), mean (in)); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
280 %! assert (mean (in, "default"), out); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
281 %! assert (mean (in, "double"), out); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
282 %! 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
|
283 %! |
170e8625562a
mean.m: add out_type option to control data type of return value
Carnë Draug <carandraug@octave.org>
parents:
24547
diff
changeset
|
284 %! 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
|
285 %! out = 2/3; |
28929
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
286 %! assert (mean (in, "default"), mean (in)); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
287 %! assert (mean (in, "default"), out); |
9e43deb9bfc3
maint: Use semicolon after assert statement inside %!test blocks.
Rik <rik@octave.org>
parents:
27984
diff
changeset
|
288 %! 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
|
289 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
290 ## 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
|
291 %!test |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
292 %! x = [-10:10]; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
293 %! 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
|
294 %! assert (mean (x), 0); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
295 %! 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
|
296 %! assert (mean (y, "all"), 0); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
297 %! y(2,4) = NaN; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
298 %! 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
|
299 %! z = y + 20; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
300 %! assert (mean (z, "all"), NaN); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
301 %! m = [20 NaN 15]; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
302 %! assert (mean (z'), m); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
303 %! assert (mean (z', "includenan"), m); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
304 %! m = [20 25.35 15]; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
305 %! assert (mean (z', "omitnan"), m); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
306 %! 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
|
307 %! 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
|
308 %! 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
|
309 |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
310 ## Test boolean input |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
311 %!test |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
312 %! assert (mean (true, "all"), 1); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
313 %! assert (mean (false), 0); |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
314 %! 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
|
315 %! 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
|
316 %! 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
|
317 %! 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
|
318 %! 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
|
319 %! 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
|
320 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
321 ## Test dimension indexing with vecdim in N-dimensional arrays |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
322 %!test |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
323 %! x = repmat ([1:20;6:25], [5 2 6 3]); |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
324 %! assert (size (mean (x, [3 2])), [10 1 1 3]); |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
325 %! assert (size (mean (x, [1 2])), [1 1 6 3]); |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
326 %! assert (size (mean (x, [1 2 4])), [1 1 6]); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
327 %! 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
|
328 %! 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
|
329 |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
330 ## Test results with vecdim in N-dimensional arrays and "omitnan" |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
331 %!test |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
332 %! x = repmat ([1:20;6:25], [5 2 6 3]); |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
333 %! m = repmat ([10.5;15.5], [5 1 1 3]); |
31421
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
334 %! 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
|
335 %! 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
|
336 %! m(2,3) = NaN; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
337 %! 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
|
338 %! m(2,3) = 15.52301255230125; |
21962c678648
mean.m: more Matlab compatibility (bugs #58116, #50571).
Andreas Bertsatos <abertsatos@biol.uoa.gr>
parents:
30875
diff
changeset
|
339 %! assert (mean (x, [3 2], "omitnan"), m, 4e-14); |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
340 |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
341 ## Test input validation |
31623
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
342 %!error <Invalid call> mean () |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
343 %!error <Invalid call> mean (1, 2, 3) |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
344 %!error <Invalid call> mean (1, 2, 3, 4, 5) |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
345 %!error <Invalid call> mean (1, "all", 3) |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
346 %!error <Invalid call> mean (1, "b") |
59422a6fbd91
mean.m: Accept large DIM inputs and calculate Matlab-compatible output (bug #63411)
Rik <rik@octave.org>
parents:
31533
diff
changeset
|
347 %!error <Invalid call> mean (1, 1, "foo") |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
348 %!error <X must be either a numeric or logical> mean ({1:5}) |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
349 %!error <X must be either a numeric or logical> mean ("char") |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
350 %!error <DIM must be a positive integer> mean (1, ones (2,2)) |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
351 %!error <DIM must be a positive integer> mean (1, 1.5) |
31525
24ca5cb70a4a
mean.m: improve error handling for dim input (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31511
diff
changeset
|
352 %!error <DIM must be a positive integer> mean (1, -1) |
24ca5cb70a4a
mean.m: improve error handling for dim input (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31511
diff
changeset
|
353 %!error <DIM must be a positive integer> mean (1, -1.5) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
354 %!error <DIM must be a positive integer> mean (1, 0) |
31525
24ca5cb70a4a
mean.m: improve error handling for dim input (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31511
diff
changeset
|
355 %!error <DIM must be a positive integer> mean (1, NaN) |
24ca5cb70a4a
mean.m: improve error handling for dim input (bug #63410)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31511
diff
changeset
|
356 %!error <DIM must be a positive integer> mean (1, Inf) |
31511
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
357 %!error <DIM must index at least N-2 dimensions of X> |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
358 %! mean (repmat ([1:20;6:25], [5 2 6 3 5]), [1 2]) |
9ee8943cad01
mean.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31421
diff
changeset
|
359 |