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