Mercurial > octave
annotate scripts/statistics/normalize.m @ 31551:fd29c7a50a78 stable
maint: use commas, semicolons consistently with Octave conventions.
* makeValidName.m: Remove %!test and move BIST %!asserts to column 1.
* base64decode.m, base64encode.m, which.m, logm.m, uniquetol.m, perms.m:
Delete semicolon (';') at end of %!assert BIST.
* lin2mu.m, interp2.m, interpn.m, lsqnonneg.m, pqpnonneg.m, uniquetol.m,
betainc.m, normalize.m: Add semicolon (';') to end of assert statement within
%!test BIST.
* __memoize__.m, tar_is_bsd.m, publish.m: Add semicolon (';') to line with
keyword "persistent".
* stft.m: Use comma (',') after "case" keyword when code immediately follows.
* gallery.m: Align commas used in case statements in massive switch block.
Remove unnecessary parentheses around a numeric case argument.
* ranks.m: Remove semicolon (';') from case statemnt argument.
author | Rik <rik@octave.org> |
---|---|
date | Sat, 26 Nov 2022 06:32:08 -0800 |
parents | 84fa33608593 |
children | 597f3ee61a48 |
rev | line source |
---|---|
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
1 ######################################################################## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
2 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
3 ## Copyright (C) 2017-2022 The Octave Project Developers |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
4 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
7 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
8 ## This file is part of Octave. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
9 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
11 ## under the terms of the GNU General Public License as published by |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
13 ## (at your option) any later version. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
14 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
18 ## GNU General Public License for more details. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
19 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
20 ## You should have received a copy of the GNU General Public License |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
21 ## along with Octave; see the file COPYING. If not, see |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
23 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
24 ######################################################################## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
25 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
26 ## -*- texinfo -*- |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
27 ## @deftypefn {} {@var{z} =} normalize (@var{x}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
28 ## @deftypefnx {} {@var{z} =} normalize (@var{x}, @var{dim}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
29 ## @deftypefnx {} {@var{z} =} normalize (@dots{}, @var{method}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
30 ## @deftypefnx {} {@var{z} =} normalize (@dots{}, @var{method}, @var{option}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
31 ## @deftypefnx {} {@var{z} =} normalize (@dots{}, @var{scale}, @var{scaleoption}, @var{center}, @var{centeroption}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
32 ## @deftypefnx {} {[@var{z}, @var{c}, @var{s}] =} normalize (@dots{}) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
33 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
34 ## Return a normalization of the data in @var{x} using one of several available |
31355
4c6c8f14766c
doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31353
diff
changeset
|
35 ## scaling and centering methods. |
4c6c8f14766c
doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31353
diff
changeset
|
36 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
37 ## @code{normalize} by default will return the @code{zscore} of @var{x}, |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
38 ## defined as the number of standard deviations each element is from the mean |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
39 ## of @var{x}. This is equivalent to centering at the mean of the data and |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
40 ## scaling by the standard deviation. |
31355
4c6c8f14766c
doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31353
diff
changeset
|
41 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
42 ## The returned value @var{z} will have the same size as @var{x}. The optional |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
43 ## return variables @var{c} and @var{s} are the centering and scaling factors |
31355
4c6c8f14766c
doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31353
diff
changeset
|
44 ## used in the normalization such that: |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
45 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
46 ## @example |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
47 ## @group |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
48 ## @tcode{@var{z} = (@var{x} - @var{c}) ./ @var{s}} |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
49 ## @end group |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
50 ## @end example |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
51 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
52 ## If @var{x} is a vector, @code{normalize} will operate on the data in |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
53 ## @var{x}. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
54 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
55 ## If @var{x} is a matrix, @code{normalize} will operate independently on |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
56 ## each column in @var{x}. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
57 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
58 ## If @var{x} is an N-dimensional array, @code{normalize} will operate |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
59 ## independently on the first non-singleton dimension in @var{x}. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
60 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
61 ## If the optional second argument @var{dim} is given, operate along this |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
62 ## dimension. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
63 ## |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
64 ## The optional inputs @var{method} and @var{option} can be used to specify the |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
65 ## type of normalization performed on @var{x}. Note that only the |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
66 ## @option{scale} and @option{center} options may be specified together using |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
67 ## any of the methods defined below. Valid normalization methods are: |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
68 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
69 ## @table @code |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
70 ## @item zscore |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
71 ## (Default) Normalizes the elements in @var{x} to the scaled distance from a |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
72 ## central value. Valid Options: |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
73 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
74 ## @table @code |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
75 ## @item std |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
76 ## (Default) Data is centered at @code{mean (@var{x})} and scaled by the |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
77 ## standard deviation. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
78 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
79 ## @item robust |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
80 ## Data is centered at @code{median (@var{x})} and scaled by the median |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
81 ## absolute deviation. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
82 ## @end table |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
83 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
84 ## @item norm |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
85 ## @var{z} is the general vector norm of @var{x}, with @var{option} being the |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
86 ## normalization factor @var{p} that determines the vector norm type according |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
87 ## to: |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
88 ## @tex |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
89 ## $$Z = \left (\sum_k \left | X_k \right |^P \right )^{1/P}$$ |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
90 ## @end tex |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
91 ## @ifnottex |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
92 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
93 ## @example |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
94 ## @group |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
95 ## @tcode{@var{z} = [sum (abs (@var{x}) .^ @var{p})] ^ (1/@var{p})} |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
96 ## @end group |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
97 ## @end example |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
98 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
99 ## @end ifnottex |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
100 ## @var{p} can be any positive scalar, specific values being: |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
101 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
102 ## @table @code |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
103 ## @item @var{p} = 1 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
104 ## @var{x} is normalized by @code{sum (abs (@var{x}))}. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
105 ## |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
106 ## @item @var{p} = 2 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
107 ## (Default) @var{x} is normalized by the Euclidian norm, or vector |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
108 ## magnitude, of the elements. |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
109 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
110 ## @item @var{P} = Inf |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
111 ## @var{x} is normalized by @code{max (abs (@var{x}))}. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
112 ## @end table |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
113 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
114 ## @item scale |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
115 ## @var{x} is scaled by a factor determined by @var{option}, which can be a |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
116 ## numeric scalar or one of the following: |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
117 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
118 ## @table @code |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
119 ## @item std |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
120 ## (Default) @var{x} is scaled by its standard deviation. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
121 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
122 ## @item mad |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
123 ## @var{x} is scaled by its median absolute deviation. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
124 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
125 ## @item first |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
126 ## @var{x} is scaled by its first element. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
127 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
128 ## @item iqr |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
129 ## @var{x} is scaled by its interquartile range. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
130 ## @end table |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
131 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
132 ## @item range |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
133 ## @var{x} is scaled to fit the range specified by @var{option} as a two |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
134 ## element scalar row vector. The default range is [0, 1]. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
135 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
136 ## @item center |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
137 ## @var{x} is shifted by an amount determined by @var{option}, which can be a |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
138 ## numeric scalar or one of the following: |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
139 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
140 ## @table @code |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
141 ## @item mean |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
142 ## (Default) @var{x} is shifted by @code{mean (@var{x})}. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
143 ## |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
144 ## @item median |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
145 ## @var{x} is shifted by @code{median (@var{x})}. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
146 ## @end table |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
147 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
148 ## @item medianiqr |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
149 ## @var{x} is shifted by @code{median (@var{x})} and scaled by the |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
150 ## interquartile range. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
151 ## @end table |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
152 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
153 ## Known @sc{matlab} incompatibilities: |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
154 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
155 ## @enumerate |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
156 ## @item |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
157 ## The option @option{DataVariables} is not yet implemented for Table class |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
158 ## @var{x} inputs. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
159 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
160 ## @item |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
161 ## Certain arrays containing NaN elements may not return @sc{matlab} compatible |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
162 ## output. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
163 ## @end enumerate |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
164 ## |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
165 ## @seealso{zscore, iqr, norm, rescale, std, median, mean, mad} |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
166 ## @end deftypefn |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
167 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
168 function [z, c, s] = normalize (x, varargin) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
169 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
170 ## FIXME: Until NANFLAG/OMITNAN option is implemented in std, mean, median, |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
171 ## etc., normalize cannot efficiently reproduce some behavior with NaNs in |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
172 ## x. xtests added to capture this. (See bug #50571) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
173 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
174 ## FIXME: When table class is implemented, remove DataVariables error line in |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
175 ## option checking section and add DataVariables data handling switch |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
176 ## section. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
177 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
178 ## Input validation |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
179 if (nargin < 1 || nargin > 8) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
180 print_usage (); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
181 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
182 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
183 if (! isnumeric (x)) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
184 error ("normalize: X must be a numeric vector, matrix, or array"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
185 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
186 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
187 if (nargin == 1) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
188 ## Directly handle simple 1 input case. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
189 [s, c] = std (x); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
190 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
191 else |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
192 ## Parse input options |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
193 dim = []; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
194 method = []; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
195 methodoption = []; |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
196 datavariables_flag = false; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
197 datavar = []; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
198 scale_and_center_flag = false; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
199 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
200 vararg_idx = 1; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
201 ## Only second optional input can be numeric without following a method. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
202 if (isnumeric (varargin{1})) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
203 dim = varargin{1}; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
204 ## Check for valid dimensions |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
205 if (! (isscalar (dim) && dim == fix (dim) && dim > 0)) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
206 error ("normalize: DIM must be an integer and a valid dimension"); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
207 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
208 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
209 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
210 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
211 ## Parse varargin to determine methods then options. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
212 n_varargin = nargin - 1; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
213 while (vararg_idx <= n_varargin) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
214 ## Arguments after second cannot be numeric without following a method. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
215 if (isnumeric (varargin{vararg_idx})) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
216 print_usage (); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
217 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
218 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
219 prop = tolower (varargin{vararg_idx}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
220 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
221 if (strcmp (prop, "datavariables")) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
222 ## FIXME: Remove error on next line and undo block comment when support |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
223 ## for Tables is implemented. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
224 error ("normalize: DataVariables method not yet implemented"); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
225 #{ |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
226 if (vararg_idx == n_varargin) |
31353
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
227 error (["normalize: DataVariables requires a table variable", ... |
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
228 " be specified"]); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
229 elseif (datavariables_flag == true) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
230 error ("normalize: DataVariables may only be specified once"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
231 else |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
232 datavariables_flag = true; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
233 datavar = varargin{vararg_idx+1}; |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
234 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
235 endif |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
236 #} |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
237 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
238 else |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
239 if (! isempty (method)) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
240 ## Catch if a second method is passed |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
241 if (scale_and_center_flag) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
242 ## if true, already specified two methods, three never possible |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
243 error ("normalize: more than two methods specified"); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
244 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
245 elseif (strcmp ({method, prop}, {"center", "scale"}) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
246 || strcmp ({method, prop}, {"scale", "center"})) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
247 ## Only scale and center can be called together |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
248 scale_and_center_flag = true; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
249 ## scale/center order doesn't matter, avoid overwriting first one |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
250 stored_method = method; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
251 method = []; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
252 stored_methodoption = methodoption; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
253 methodoption = []; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
254 else |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
255 ## not scale and center, throw appropriate error |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
256 if (any (strcmp (prop, {"zscore", "norm", "range", "scale", ... |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
257 "center", "medianiqr"}))) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
258 error ("normalize: methods '%s' and '%s' may not be combined", |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
259 method, prop); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
260 else |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
261 error ("normalize: unknown method '%s'", prop); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
262 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
263 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
264 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
265 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
266 ## Determine method and whether there's an appropriate option specified |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
267 switch (prop) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
268 case "zscore" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
269 method = "zscore"; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
270 if (vararg_idx < n_varargin) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
271 nextprop = tolower (varargin{vararg_idx+1}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
272 if (strcmp (nextprop, "std") || strcmp (nextprop, "robust")) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
273 methodoption = nextprop; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
274 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
275 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
276 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
277 if (isempty (methodoption)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
278 methodoption = "std"; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
279 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
280 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
281 case "norm" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
282 method = "norm"; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
283 if (vararg_idx < n_varargin && isnumeric (varargin{vararg_idx+1})) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
284 nextprop = varargin{vararg_idx+1}; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
285 if (isscalar (nextprop) && (nextprop > 0)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
286 methodoption = nextprop; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
287 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
288 else |
31353
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
289 error (["normalize: 'norm' option must be a positive ", ... |
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
290 "scalar or Inf"]); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
291 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
292 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
293 if (isempty (methodoption)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
294 methodoption = 2; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
295 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
296 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
297 case "range" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
298 method = "range"; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
299 if (vararg_idx < n_varargin && isnumeric (varargin{vararg_idx+1})) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
300 nextprop = varargin{vararg_idx+1}; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
301 if (any (size (nextprop) != [1 2])) |
31353
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
302 error (["normalize: 'range' must be specified as a ", ... |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
303 "2-element row vector [a, b]"]); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
304 endif |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
305 methodoption = nextprop; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
306 vararg_idx++; |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
307 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
308 if (isempty (methodoption)) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
309 methodoption = [0, 1]; |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
310 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
311 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
312 case "scale" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
313 method = "scale"; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
314 if (vararg_idx < n_varargin) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
315 nextprop = tolower (varargin{vararg_idx+1}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
316 if (isnumeric (nextprop)) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
317 if (! isscalar (nextprop)) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
318 error ("normalize: scale value must be a scalar"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
319 else |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
320 methodoption = nextprop; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
321 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
322 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
323 elseif (any (strcmp (nextprop, {"std", "mad", "first", "iqr"}))) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
324 methodoption = nextprop; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
325 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
326 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
327 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
328 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
329 if (isempty (methodoption)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
330 methodoption = 'std'; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
331 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
332 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
333 case "center" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
334 method = "center"; |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
335 if (vararg_idx < n_varargin) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
336 nextprop = tolower (varargin{vararg_idx+1}); |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
337 if (isscalar (nextprop) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
338 || any (strcmp (nextprop, {"mean", "median"}))) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
339 methodoption = nextprop; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
340 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
341 elseif (isnumeric (nextprop)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
342 error ("normalize: center shift must be a scalar value"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
343 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
344 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
345 if (isempty (methodoption)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
346 methodoption = 'mean'; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
347 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
348 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
349 case "medianiqr" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
350 method = "medianiqr"; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
351 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
352 otherwise |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
353 error ("normalize: unknown method '%s'", prop); |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
354 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
355 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
356 endif |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
357 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
358 vararg_idx++; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
359 endwhile |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
360 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
361 if (scale_and_center_flag) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
362 method = "scaleandcenter"; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
363 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
364 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
365 if (isempty (method)) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
366 method = 'zscore'; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
367 methodoption = 'std'; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
368 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
369 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
370 if (isempty (dim)) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
371 ## Operate on first non-singleton dimension. |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
372 (dim = find (size (x) > 1, 1)) || (dim = 1); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
373 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
374 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
375 ## Perform normalization based on specified methods |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
376 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
377 ## FIXME: DataTables option not handled below. Fix after Table Class |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
378 ## has been implemented. |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
379 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
380 ## Default center/scale factors: |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
381 c = 0; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
382 s = 1; |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
383 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
384 switch (method) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
385 case "zscore" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
386 switch (methodoption) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
387 case "std" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
388 [s, c] = std (x, [], dim); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
389 case "robust" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
390 ## center/median to zero and MAD = 1 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
391 c = median (x, dim); |
31379
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
392 ## FIXME: Use bsxfun, rather than broadcasting, until broadcasting |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
393 ## supports diagonal and sparse matrices (Bugs #41441, #35787). |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
394 s = median (abs (bsxfun (@minus, x , c)), dim); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
395 ## s = median (abs (x - c), dim); # Automatic broadcasting |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
396 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
397 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
398 case "norm" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
399 switch (methodoption) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
400 case 1 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
401 s = sum (abs (x), dim); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
402 case Inf |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
403 s = max (abs (x), [], dim); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
404 otherwise |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
405 s = sum (abs (x) .^ methodoption, dim) .^ (1/methodoption); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
406 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
407 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
408 case "range" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
409 ## if any range element = 0, avoid divide by zero by replacing that |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
410 ## range element with 1. output will be zero+min due to x-min(x)=0. |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
411 x_range = range (x, dim); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
412 x_range(x_range == 0) = 1; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
413 z_range = methodoption(2) - methodoption(1); |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
414 s = x_range ./ z_range; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
415 c = min (x, [], dim) - (methodoption(1) .* s); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
416 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
417 case "scale" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
418 s = process_scale_option (x, dim, methodoption); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
419 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
420 case "center" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
421 c = process_center_option (x, dim, methodoption); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
422 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
423 case "scaleandcenter" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
424 ## repeats scale and center using appropriate order and info |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
425 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
426 switch (stored_method) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
427 case "scale" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
428 ## stored info is scale, latest info is center |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
429 center_option = methodoption; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
430 scale_option = stored_methodoption; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
431 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
432 case "center" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
433 ## stored info is center, latest info is scale |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
434 center_option = stored_methodoption; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
435 scale_option = methodoption; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
436 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
437 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
438 s = process_scale_option (x, dim, scale_option); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
439 c = process_center_option (x, dim, center_option); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
440 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
441 case "medianiqr" |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
442 c = median (x, dim); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
443 s = iqr (x, dim); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
444 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
445 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
446 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
447 endif |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
448 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
449 ## Divide by scale factor. If scale = 0, divide by zero = Inf, which is OK. |
31379
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
450 |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
451 ## FIXME: Use bsxfun, rather than broadcasting, until broadcasting |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
452 ## supports diagonal and sparse matrices (Bugs #41441, #35787). |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
453 z = bsxfun (@rdivide, bsxfun (@minus, x , c), s); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
454 ## z = (x - c) ./ s; # Automatic broadcasting |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
455 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
456 endfunction |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
457 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
458 function c = process_center_option (x, dim, center_option) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
459 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
460 if (isnumeric (center_option)) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
461 c = center_option; |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
462 else |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
463 switch (center_option) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
464 case "mean" |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
465 c = mean (x, dim); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
466 case "median" |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
467 c = median (x, dim); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
468 endswitch |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
469 endif |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
470 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
471 endfunction |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
472 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
473 function s = process_scale_option (x, dim, scale_option) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
474 |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
475 warning ("off", "Octave:divide-by-zero", "local"); |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
476 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
477 if (isnumeric (scale_option)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
478 s = scale_option; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
479 else |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
480 switch (scale_option) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
481 case "std" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
482 s = std (x, [], dim); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
483 case "mad" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
484 s = mad (x, 1, dim); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
485 case "first" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
486 dim_vector = repmat ({':'}, ndims(x), 1); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
487 dim_vector{dim} = 1; |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
488 s = x(dim_vector{:}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
489 case "iqr" |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
490 s = iqr (x, dim); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
491 endswitch |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
492 endif |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
493 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
494 endfunction |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
495 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
496 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
497 ## no method specified, using zscore & std |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
498 %!assert (normalize ([1,2,3]), [-1,0,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
499 %!assert (normalize ([1,2,3], 2), [-1,0,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
500 %!assert (normalize (single ([1,2,3])), single ([-1,0,1])) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
501 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2]), [1,0,-1;0,1,0;-1,-1,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
502 %!assert (normalize (magic (3)), [[3;-2;-1]/sqrt(7),[-1;0;1],[1;2;-3]/sqrt(7)]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
503 %!assert (normalize (magic (3), 2), [[3 -4 1]/sqrt(13);[-1 0 1];[-1 4 -3]/sqrt(13)]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
504 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
505 ## Method: zscore, [std, robust] |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
506 %!assert (normalize ([1,2,3],"zscore","std"), [-1,0,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
507 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"zscore","std"), [1,0,-1;0,1,0;-1,-1,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
508 %!assert (normalize (magic (3),"zscore","std"), [[3;-2;-1]/sqrt(7),[-1;0;1],[1;2;-3]/sqrt(7)]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
509 %!assert (normalize ([1,2,3],"zscore","robust"), [-1,0,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
510 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"zscore","robust"), [1,0,-1;0,1,0;-1,-1,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
511 %!assert (normalize (magic (3),"zscore","robust"), [4 -1 0; -1 0 1; 0 1 -4]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
512 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
513 ## Method: norm [1, 2, inf] |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
514 %!assert (normalize ([1,2,3],"norm",1), [1/6 1/3 1/2]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
515 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"norm",1), [1,0,-1;0,1,0;-1,-1,1]/2) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
516 %!assert (normalize (magic (3),"norm",1), magic(3)/15) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
517 %!assert (normalize ([1,2,3],"norm",2), [1 2 3]./3.741657386773941, eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
518 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"norm",2), [1,0,-1;0,1,0;-1,-1,1]*(sqrt(2)/2), eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
519 %!assert (normalize ([1,2,3],"norm",Inf), [1/3 2/3 1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
520 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"norm",Inf), [1,0,-1;0,1,0;-1,-1,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
521 %!assert (normalize (magic (3),"norm",Inf), [[8;3;4]/8,[1;5;9]/9,[6;7;2]/7]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
522 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
523 ## Method: range |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
524 %!assert (normalize ([1,2,3],"range"), [0 0.5 1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
525 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"range",[0 1]), [1,0.5,0;0.5,1,0.5;0,0,1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
526 %!assert (normalize (magic (3),"range",[-1 1]), [1 -1 0.6; -1 0 1; -0.6 1 -1], eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
527 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
528 ## Method: scale [mad first iqr number] |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
529 %!assert (normalize ([1,2,3],"scale"), [1 2 3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
530 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"scale","std"), [1 0 -1; 0 1 0; -1 -1 1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
531 %!assert (normalize (magic (3),"scale",2), (magic(3)/2)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
532 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
533 %!assert (normalize ([1,2,3],"scale", "mad"), [1 2 3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
534 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"scale","mad"), [1 0 -1; 0 1 0; -1 -1 1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
535 %!assert (normalize (magic (3),"scale","mad"), [8 0.25 6; 3 1.25 7; 4 2.25 2]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
536 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
537 %!assert (normalize ([1,2,3],"scale", "first"), [1 2 3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
538 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"scale","first"), [1 NaN 1; 0 Inf 0; -1 -Inf -1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
539 %!assert (normalize (magic (3),"scale","first"), [1 1 1; 3/8 5 7/6; 0.5 9 1/3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
540 %!assert (normalize (magic (3),2,"scale","first"), [1 1/8 3/4;1 5/3 7/3;1 9/4 0.5]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
541 %!test |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
542 %! x = reshape (magic (4),2,2,2,2); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
543 %! y3 = cat (4, cat (3,ones(2),[1/8 7/9;11/5 7/2]), cat (3,ones(2),[13/3 2; 4/5 1/15])); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
544 %! y4 = cat (4, ones (2,2,2), cat (3,[3/16 2/3; 2 15/4],[6.5 12/7; 8/11 1/14] )); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
545 %! assert (normalize (x, 3, "scale", "first"), y3); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
546 %! assert (normalize (x, 4, "scale", "first"), y4); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
547 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
548 %!assert (normalize ([1,2,3], "scale", "iqr"), [1 2 3]*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
549 %!assert (normalize ([1,2,3]', "scale", "iqr"), ([1 2 3]')*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
550 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2],"scale","iqr"), [1 0 -1; 0 1 0; -1 -1 1]* 2/3, eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
551 %!assert (normalize (magic (3),"scale","iqr"), [[8;3;4]/3.75,[1;5;9]/6,[6;7;2]/3.75],eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
552 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
553 ## Method: center [mean median number] |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
554 %!assert (normalize ([1,2,3], "center"), [-1 0 1]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
555 %!assert (normalize ([1,2,3], 1, "center"), [0 0 0]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
556 %!assert (normalize ([1,2,3], "center", 10), [-9 -8 -7]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
557 %!assert (normalize ([1 2 3 10], "center", "mean"), [-3 -2 -1 6]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
558 %!assert (normalize ([1 2 3 10], "center", "median"), [-1.5 -0.5 0.5 7.5]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
559 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
560 ## Method: medianiqr |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
561 %!assert (normalize ([1,2,3], "medianiqr"), [-1 0 1]*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
562 %!assert (normalize ([1,2,3]', "medianiqr"), ([-1 0 1]')*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
563 %!assert (normalize ([2,0,-2;0,2,0;-2,-2,2], "medianiqr"), [1 0 -1; 0 1 0; -1 -1 1]*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
564 %!assert (normalize (magic (3), "medianiqr"), [8/5 -1 0; -2/5 0 2/5; 0 1 -8/5]*2/3) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
565 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
566 ## Test NaN and Inf |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
567 %!assert (normalize ([1 2 Inf], 2), [NaN, NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
568 %!assert (normalize ([1 2 3], 1), [NaN, NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
569 %!assert (normalize ([1 2 3], 3), [NaN, NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
570 %!assert (normalize (ones (3,2,2,2)), NaN (3,2,2,2)) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
571 %!assert (normalize (Inf), NaN) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
572 %!assert (normalize (NaN), NaN) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
573 %!assert (normalize ([Inf, NaN]), [NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
574 %!assert (normalize ([Inf, NaN]'), [NaN, NaN]') |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
575 %!assert (normalize ([Inf, Inf], 1), [NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
576 %!assert (normalize ([Inf, Inf], 2), [NaN, NaN]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
577 %!assert (normalize ([Inf, Inf]', 1), [NaN, NaN]') |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
578 %!assert (normalize ([Inf, Inf]', 2), [NaN, NaN]') |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
579 %!assert (normalize ([1 2 NaN; NaN 3 4], 1), [NaN -1 NaN; NaN 1 NaN]*sqrt(2)/2, eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
580 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
581 ## Two input methods, must be scale and center |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
582 %!assert (normalize (magic(3), "scale", "center"), normalize (magic(3), "zscore"), eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
583 %!assert (normalize (magic(3), "center", "scale"), normalize (magic(3), "zscore"), eps) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
584 |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
585 ## Test additional outputs |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
586 %!test |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
587 %! [z, c, s] = normalize ([1, 2, 3], 2); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
588 %! assert ({z, c, s}, {[-1 0 1], [2], [1]}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
589 %! [z, c, s] = normalize (magic (3), "zscore", "std"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
590 %! assert ({z, c, s}, {[[3;-2;-1]/sqrt(7),[-1;0;1],[1;2;-3]/sqrt(7)], [5 5 5], [sqrt(7) 4 sqrt(7)]}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
591 %! [z, c, s] = normalize (magic (3), "zscore", "robust"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
592 %! assert ({z, c, s}, {[4 -1 0; -1 0 1; 0 1 -4], [4 5 6], [1 4 1]}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
593 %! [z, c, s] = normalize (magic (3), "norm", 1); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
594 %! assert ({z, c, s}, {magic(3)/15 , 0, [15 15 15]}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
595 %! [z, c, s] = normalize ([2,0,-2;0,2,0;-2,-2,2],"norm",2); |
31551
fd29c7a50a78
maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents:
31379
diff
changeset
|
596 %! assert ({z, c, s}, {[1,0,-1;0,1,0;-1,-1,1]*(sqrt(2)/2), 0, [1 1 1]*2*sqrt(2)}, eps); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
597 %! [z, c, s] = normalize ([1 2 3], "norm", Inf); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
598 %! assert ({z, c, s}, {[1 2 3]/3, 0, 3}, eps); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
599 %! [z, c, s] = normalize (magic (3),"range",[-1 1]); |
31551
fd29c7a50a78
maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents:
31379
diff
changeset
|
600 %! assert ({z, c, s}, {[1 -1 0.6; -1 0 1; -0.6 1 -1], [5.5 5 4.5], [2.5 4 2.5]}, eps); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
601 %! [z, c, s] = normalize (magic (3),"scale","mad"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
602 %! assert ({z, c, s}, {[8 0.25 6; 3 1.25 7; 4 2.25 2], 0, [1 4 1]}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
603 %! [z, c, s] = normalize (magic (3),"scale","first"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
604 %! assert ({z, c, s}, {[1 1 1; 3/8 5 7/6; 0.5 9 1/3],0, [8 1 6]}, eps); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
605 %! [z, c, s] = normalize ([1,2,3]', "scale", "iqr"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
606 %! assert ({z, c, s}, {([1 2 3]')*2/3, 0, 1.5}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
607 %! [z, c, s] = normalize ([1,2,3], "center", 10); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
608 %! assert ({z, c, s}, {[-9 -8 -7], 10, 1}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
609 %! [z, c, s] = normalize ([1 2 3 10], "center", "mean"); |
31551
fd29c7a50a78
maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents:
31379
diff
changeset
|
610 %! assert ({z, c, s}, {[-3 -2 -1 6], 4, 1}); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
611 %! [z, c, s] = normalize ([1 2 3 10], "center", "median"); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
612 %! assert ({z, c, s}, {[-1.5 -0.5 0.5 7.5], 2.5, 1}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
613 %! [z, c, s] = normalize (magic (3), "medianiqr"); |
31551
fd29c7a50a78
maint: use commas, semicolons consistently with Octave conventions.
Rik <rik@octave.org>
parents:
31379
diff
changeset
|
614 %! assert ({z, c, s}, {[8/5 -1 0; -2/5 0 2/5; 0 1 -8/5]*2/3, [4 5 6], [3.75 6 3.75]}, eps); |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
615 %! [z, c, s] = normalize ([1 2 Inf], 2); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
616 %! assert ({z, c, s}, {[NaN, NaN, NaN], Inf, NaN}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
617 %! [z, c, s] = normalize (Inf); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
618 %! assert ({z, c, s}, {NaN, Inf, NaN}); |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
619 |
31379
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
620 ## Test sparse and diagonal inputs |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
621 %!test |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
622 %! [z, c, s] = normalize (eye (2)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
623 %! assert (z, (sqrt(2)/2)*[1, -1; -1, 1], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
624 %! assert (c, [0.5, 0.5], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
625 %! assert (s, (sqrt(2)/2)*[1, 1], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
626 %!test |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
627 %! [z, c, s] = normalize (sparse (eye (2))); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
628 %! assert (full (z), (sqrt(2)/2)*[1, -1; -1, 1], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
629 %! assert (full (c), [0.5, 0.5], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
630 %! assert (full (s), (sqrt(2)/2)*[1, 1], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
631 %!test |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
632 %! [z, c, s] = normalize (sparse (magic (3)), "zscore", "robust"); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
633 %! assert (full (z), [4 -1 0; -1 0 1; 0 1 -4], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
634 %! assert (full (c), [4, 5, 6], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
635 %! assert (full (s), [1, 4, 1], eps); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
636 %!test <55765> |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
637 %! [z, c, s] = normalize (sparse (eye(2))); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
638 %! assert (issparse (z)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
639 %! assert (issparse (c)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
640 %! assert (issparse (s)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
641 %!test <55765> |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
642 %! [z, c, s] = normalize (sparse (magic (3)), "zscore", "robust"); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
643 %! assert (issparse (z)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
644 %! assert (issparse (c)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
645 %! assert (issparse (s)); |
84fa33608593
normalize.m: Use bsxfun rather than broadcasting (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31366
diff
changeset
|
646 |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
647 ## Matlab ignores NaNs, operating as if the vector had one less element, then |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
648 ## returns the result retaining the NaN in the solution. |
31352
014648ce3267
normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31351
diff
changeset
|
649 %!assert <50571> (normalize ([1 2 NaN], 2), [-1, 1, NaN]*sqrt(2)/2) |
014648ce3267
normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31351
diff
changeset
|
650 %!assert <50571> (normalize ([1 2 NaN; 1 2 3], 2), [[-1 1 NaN]*sqrt(2)/2; -1 0 1], eps) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
651 |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
652 ## Test input validation |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
653 %!error <Invalid call> normalize () |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
654 %!error <Invalid call> normalize (1, 2, 3) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
655 %!error <X must be a numeric> normalize (['A'; 'B']) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
656 %!error <DIM must be an integer> normalize (1, ones (2,2)) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
657 %!error <DIM must be an integer> normalize (1, 1.5) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
658 %!error <DIM must be .* a valid dimension> normalize (1, 0) |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
659 %!error <more than two methods specified> normalize ([1 2 3], "scale", "center", "norm") |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
660 %!error <methods .* may not be combined> normalize ([1 2 3], "norm", "zscore") |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
661 %!error <unknown method 'foo'> normalize ([1 2 3], "norm", "foo") |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
662 % |
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
663 %!error <'norm' option must be a positive scalar or Inf> normalize ([1 2 3], "norm", [1 2]) |
31353
fa3ae8fd8449
normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
31352
diff
changeset
|
664 %!error <'norm' option must be a positive scalar or Inf> normalize ([1 2 3], "norm", -1) |
31351
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
665 %!error <'range' must be specified as> normalize ([1 2 3], "range", [1 2]') |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
666 %!error <'range' must be specified as> normalize ([1 2 3], "range", [1 2 3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
667 %!error <'range' must be specified as> normalize ([1 2 3], "range", 1) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
668 %!error <scale value must be a scalar> normalize ([1 2 3], "scale", [1 2 3]) |
ecfb41743fd2
Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff
changeset
|
669 %!error <center shift must be a scalar value> normalize ([1 2 3], "center", [1 2]) |
31358
1193e869de98
normalize.m: Use Octave coding conventions.
Rik <rik@octave.org>
parents:
31356
diff
changeset
|
670 %!error <unknown method 'foo'> normalize ([1 2 3], "foo") |