annotate scripts/statistics/normalize.m @ 31356:07a3ceab58d6

* normalize.m: Fix typo in previous change.
author John W. Eaton <jwe@octave.org>
date Thu, 27 Oct 2022 10:38:47 -0400
parents 4c6c8f14766c
children 1193e869de98
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
3 ## Copyright (C) 2017-2020 The Octave Project Developers
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 -*-
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
27 ## @deftypefn {} {@var{Z} =} normalize (@var{X})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
28 ## @deftypefnx {} {@var{Z} =} normalize (@var{X}, @var{dim})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
29 ## @deftypefnx {} {@var{Z} =} normalize (@dots{}, @var{method})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
30 ## @deftypefnx {} {@var{Z} =} normalize (@dots{}, @var{method}, @var{Option})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
31 ## @deftypefnx {} {@var{Z} =} normalize (@dots{}, @var{scale}, @var{ScaleOption}, @var{center}, @var{CenterOption})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
32 ## @deftypefnx {} {[@var{Z}, @var{C}, @var{S}] =} normalize (@dots{})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
33 ##
31355
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
34 ## Return a normalization of the data in @var{X} using one of several available
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 ##
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
37 ## @code{normalize} by default will return the @code{zscore} of @var{X}, defined
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
38 ## as the number of standard deviations each element is from the mean of
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
39 ## @var{X}. This is equivalent to centering at the mean of the data and scaling
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
40 ## by the standard deviation.
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
41 ##
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
42 ## The returned value @var{Z} will have the same size as @var{X}. The optional
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
43 ## return variables @var{C} and @var{S} are the centering and scaling factors
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
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
48 ## @tcode{@var{Z} = (@var{X} - @var{C}) ./ @var{S}}
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 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
52 ## If @var{X} is a vector, @code{normalize} will operate on the data in @var{X}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
53 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
54 ## If @var{X} is a matrix, @code{normalize} will operate independently on
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
55 ## each column in @var{X}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
56 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
57 ## If @var{X} is a n-dimensional array, @code{normalize} will operate
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
58 ## independently on the first non-singleton dimension in @var{X}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
59 ##
31355
4c6c8f14766c doc: Add normalize to manual and clean up docstring
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31353
diff changeset
60 ## The optional second input variable @var{DIM} can be used to force
31356
07a3ceab58d6 * normalize.m: Fix typo in previous change.
John W. Eaton <jwe@octave.org>
parents: 31355
diff changeset
61 ## @code{normalize} to operate over the specified dimension. @var{DIM}
07a3ceab58d6 * normalize.m: Fix typo in previous change.
John W. Eaton <jwe@octave.org>
parents: 31355
diff changeset
62 ## must be an integer scalar.
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
63 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
64 ## The optional input variables @var{Method} and @var{Option} can be used to
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
65 ## specify the type of normalization performed on @var{X}. Note that only the
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
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
71 ## (Default) Normalizes the elements in @var{X} to the scaled distance from a
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
72 ## central value. Valid Options:
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
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
76 ## (Default) Data is centered at @code{mean(@var{X})} and scaled by the
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
77 # standard deviation.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
78 ## @item robust
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
79 ## Data is centered at @code{median(@var{X})} and scaled by the median
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
80 ## absolute deviation.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
81 ## @end table
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
82 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
83 ## @item norm
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
84 ## @var{Z} is the general vector norm of @var{X}, with @var{OPTION} being the
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
85 ## normalization factor @var{P} that determines the vector norm type according
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
86 ## to:
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
87 ## @tex
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
88 ## $$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
89 ## @end tex
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
90 ## @ifnottex
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
91 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
92 ## @example
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
93 ## @group
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
94 ## @tcode{@var{Z} = [sum (abs(@var{X})^@var{P})]^(1/@var{P})}
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
95 ## @end group
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
96 ## @end example
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
97 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
98 ## @end ifnottex
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
99 ## @var{P} can be any positive scalar, specific values being:
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
100 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
101 ## @table @code
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
102 ## @item @var{P} = 1
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
103 ## @var{X} is normalized by @code{sum (abs (@var{X}))}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
104 ## @item @var{P} = 2
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
105 ## (Default) @var{X} is normalized by the Euclidian norm, or vector
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
106 ## magnitude, of the elements.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
107 ## @item @var{P} = Inf
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
108 ## @var{X} is normalized by @code{max (abs (@var{X}))}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
109 ## @end table
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
110 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
111 ## @item scale
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
112 ## @var{X} is scaled by a factor determined by @var{Option}, which can be a
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
113 ## numeric scalar or one of the following:
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
114 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
115 ## @table @code
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
116 ## @item std
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
117 ## (Default) @var{X} is scaled by its standard deviation.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
118 ## @item mad
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
119 ## @var{X} is scaled by its median absolute deviation.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
120 ## @item first
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
121 ## @var{X} is scaled by the first element in the vector.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
122 ## @item iqr
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
123 ## @var{X} is scaled by the vector's interquartile range.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
124 ## @end table
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
125 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
126 ## @item range
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
127 ## @var{X} is scaled to fit the range specified by @var{Option} as a two element
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
128 ## scalar row vector. The default range is [0 1].
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
129 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
130 ## @item center
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
131 ## @var{X} is shifted by an amount determined by @var{Option}, which can be a
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
132 ## numeric scalar or one of the following:
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
133 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
134 ## @table @code
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
135 ## @item mean
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
136 ## (Default) @var{X} is shifted by @code{mean (@var{X})}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
137 ## @item median
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
138 ## @var{X} is shifted by @code{median (@var{X})}.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
139 ## @end table
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
140 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
141 ## @item medianiqr
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
142 ## @var{X} is shifted such by @code{median (@var{X})} and scaled by the vector's
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
143 ## interquartile range.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
144 ## @end table
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
145 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
146 ## Known @sc{matlab} incompatibilities:
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 ## @enumerate
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
149 ## @item
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
150 ## The DataVariables option is not yet implemented in @code{normalize} for
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
151 ## Table class @var{X} inputs.
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 ## @item
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
154 ## Certain arrays containing NaN elements may not return Matlab compatible
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
155 ## output.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
156 ## @end enumerate
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
157 ##
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
158 ## @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
159 ## @end deftypefn
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
160
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
161 function [z, centervalues, scalevalues] = normalize (x, varargin)
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
162 ## FIXME: until NANFLAG/OMITNAN option is implemented in std, mean, median,
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
163 ## etc., normalize cannot efficiently reproduce some behavior with NaN's in x.
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
164 ## 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
165
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
166 ## FIXME: when table class is implemented, remove DataVariables error line in
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
167 ## option checking section and add DataVariables data handling switch setion.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
168
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
169 ## input checks
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
170 if ((nargin < 1) || (nargin > 8))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
171 print_usage ();
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
172 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
173
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
174 if !(isnumeric (x) || islogical (x))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
175 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
176 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
177
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
178 if (nargin == 1)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
179 ## directly handle simple 1 input case.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
180 [scalevalues, centervalues] = std (x);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
181 z = (x - centervalues)./ scalevalues;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
182
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
183 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
184 ## parse input options
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
185 dim = []; # default = vector dimension, matrix column, or 1st n-dim >1
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
186 method = []; # default = zscore
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
187 methodoption = []; # default = std
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
188 datavariables_flag = false;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
189 datavar = [];
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
190 scale_and_center_flag = false;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
191
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
192 vararg_idx = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
193 ##only second optional input can be numeric without following a method
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
194 if isnumeric (varargin{1})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
195 dim = varargin{1};
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
196 ##check for valid dimensions
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
197 if !((isscalar (dim)) && (dim > 0) && (dim == fix (dim)))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
198 error ("normalize: DIM must be a positive scalar integer");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
199 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
200 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
201 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
202
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
203 ## parse varargin to determine methods then options
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
204 while (vararg_idx <= (nargin - 1))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
205 ## arguments after second cannot be numeric without following a method
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
206 if isnumeric (varargin{vararg_idx})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
207 print_usage ();
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
208 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
209
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
210 prop = tolower (varargin{vararg_idx});
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
211
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
212 if (strcmp (prop,"datavariables"))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
213 ##FIXME: remove error on next line when Tables is implemented
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
214 error ("normalize: DataVariables method not yet implemented.");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
215 if (vararg_idx == (nargin - 1))
31353
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
216 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
217 " be specified"]);
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
218 elseif (datavariables_flag == true)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
219 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
220 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
221 datavariables_flag = true;
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
222 datavar = varargin{vararg_idx+1}; #no tolower if Tables case sensitive
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
223 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
224 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
225
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
226 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
227 if (!isempty (method))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
228 ## catch if a second method is passed
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
229 if (scale_and_center_flag)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
230 ## if true, already specified two methods, three never possible
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
231 error ("normalize: too many methods specified");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
232
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
233 elseif ((strcmp ({method, prop}, {"center", "scale"})) ...
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
234 || strcmp ({method, prop}, {"scale", "center"}))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
235 ## only scale and center can be called together
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
236 scale_and_center_flag = true;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
237 ## 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
238 stored_method = method;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
239 method = [];
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
240 stored_methodoption = methodoption;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
241 methodoption = [];
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
242 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
243 ## not scale and center, throw appropriate error
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
244 if any (strcmp (prop, {"zscore", "norm", "range", "scale", ...
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
245 "center", "medianiqr"}))
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
246 error ("normalize: methods `%s` and `%s` may not be combined", ...
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
247 method, prop);
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
248 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
249 error ("normalize: unknown method `%s`", prop);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
250 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
251 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
252 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
253
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
254 ## determine method and whether there's an appropriate option specified
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
255 switch (prop)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
256 case "zscore"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
257 method = "zscore";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
258 if (vararg_idx < (nargin - 1))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
259 nextprop = tolower (varargin{vararg_idx+1});
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
260 if (strcmp (nextprop, "std") || strcmp (nextprop, "robust"))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
261 if (!isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
262 error ("normalize: only one method option may be specified");
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 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
265 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
266 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
267 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
268 if (isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
269 methodoption = "std";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
270 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
271
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
272 case "norm"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
273 method = "norm";
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
274 if ((vararg_idx < (nargin - 1)) && ...
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
275 isnumeric (varargin{vararg_idx+1}))
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
276 nextprop = varargin{vararg_idx+1};
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
277 if (isscalar (nextprop) && (nextprop > 0))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
278 if (!isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
279 error ("normalize: only one method option may be specified");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
280 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
281 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
282 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
283 else
31353
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
284 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
285 "scalar or Inf"]);
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
286 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
287 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
288 if (isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
289 methodoption = 2;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
290 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
291
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
292 case "range"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
293 method = "range";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
294 if (vararg_idx < (nargin - 1) && isnumeric (varargin{vararg_idx+1}))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
295 nextprop = varargin{vararg_idx+1};
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
296 if (size (nextprop) == [1 2])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
297 if (!isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
298 error ("normalize: only one method option may be specified");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
299 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
300 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
301 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
302 else
31353
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
303 error (["normalize: 'range' must be specified as a ", ...
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
304 "2-element row vector [a b]"]);
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
305 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
306 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
307 if (isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
308 methodoption = [0 1];
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
309 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
310
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
311 case "scale"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
312 method = "scale";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
313 if (vararg_idx < (nargin - 1))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
314 nextprop = tolower (varargin{vararg_idx+1});
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
315 if (isnumeric (nextprop))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
316 if (!isscalar (nextprop))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
317 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
318 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
319 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
320 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
321 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
322 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
323 if (!isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
324 error ("normalize: only one method option may be specified");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
325 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
326 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
327 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
328 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
329 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
330
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
331 if (isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
332 methodoption = 'std';
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
333 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
334
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
335 case "center"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
336 method = "center";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
337 if (vararg_idx < (nargin - 1))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
338 nextprop = tolower (varargin{vararg_idx+1});
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
339 if (isscalar (nextprop) || ...
014648ce3267 normalize.m: Add xtest bug number and cleanup line-lengths (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31351
diff changeset
340 any (strcmp (nextprop, {"mean", "median"})))
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
341 if (!isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
342 error ("normalize: only one method option may be specified");
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 methodoption = nextprop;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
345 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
346 elseif (isnumeric (nextprop))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
347 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
348 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
349 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
350 if (isempty (methodoption))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
351 methodoption = 'mean';
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
352 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
353
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
354 case "medianiqr"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
355 method = "medianiqr";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
356
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
357 otherwise
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
358 error ("normalize: unknown method '%s'", prop);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
359 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
360 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
361 vararg_idx++;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
362 endwhile
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
363
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
364 if scale_and_center_flag
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
365 method = "scaleandcenter";
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
366 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
367
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
368 if isempty (method)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
369 method = 'zscore';
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
370 methodoption = 'std';
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
371 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
372
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
373 if isempty (dim)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
374 if isvector (x)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
375 if iscolumn (x)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
376 dim = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
377 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
378 dim = 2;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
379 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
380 elseif (ismatrix(x))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
381 ## matrix x, operate independently along columns
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
382 dim = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
383 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
384 ## operate on first non-singleton dimension.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
385 dim = find ((size (x) > 1), 1);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
386 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
387
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
388 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
389
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
390
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
391 ## Perform normalization based on specified methods
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
392
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
393 ## FIXME: DataTables option not handled below. Fix after Table Class
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
394 ## has been implemented.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
395
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
396 ## Default scaling factors:
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
397 centervalues = 0;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
398 scalevalues = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
399
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
400 switch (method)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
401 case "zscore"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
402 switch methodoption
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
403 case "std"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
404 [scalevalues, centervalues] = std (x, [], dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
405 case "robust"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
406 ##center/median to zero and MAD = 1
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
407 centervalues = median (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
408 scalevalues = median (abs (x - centervalues), dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
409 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
410
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
411 case "norm"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
412 switch methodoption
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
413 case 1
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
414 scalevalues = sum (abs (x), dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
415 case Inf
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
416 scalevalues = max (abs (x), [], dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
417 otherwise
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
418 scalevalues = sum ((abs (x) .^ methodoption), dim) .^...
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
419 (1./methodoption);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
420 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
421
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
422 case "range"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
423 ## if any range element = 0, avoid divide by zero by replacing that
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
424 ## range element with 1. output will be zero+min due to x-min(x)=0.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
425 x_range = range (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
426 x_range(x_range == 0) = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
427 z_range = methodoption(2) - methodoption(1);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
428 scalevalues = x_range ./ z_range;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
429 centervalues = min (x, [], dim) - (methodoption(1) .* scalevalues);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
430
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
431 case "scale"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
432 scalevalues = process_scale_option (x, dim, methodoption);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
433
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
434 case "center"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
435 centervalues = process_center_option (x, dim, methodoption);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
436
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
437 case "scaleandcenter"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
438 ## 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
439
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
440 switch (stored_method)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
441 case "scale"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
442 ## 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
443 center_option = methodoption;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
444 scale_option = stored_methodoption;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
445
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
446 case "center"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
447 ## 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
448 center_option = stored_methodoption;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
449 scale_option = methodoption;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
450 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
451
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
452 scalevalues = process_scale_option (x, dim, scale_option);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
453 centervalues = process_center_option (x, dim, center_option);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
454
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
455 case "medianiqr"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
456 centervalues = median (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
457 scalevalues = iqr (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
458 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
459
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
460 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
461
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
462 ## div by scale factor. if scale = 0, div by zero = Inf is ok.
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
463 z = (x - centervalues) ./ scalevalues;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
464 endfunction
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
465
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
466 function c = process_center_option (x, dim, center_option)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
467 if (isnumeric (center_option))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
468 c = center_option;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
469 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
470 switch (center_option)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
471 case "mean"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
472 c = mean (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
473 case "median"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
474 c = median (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
475 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
476 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
477 endfunction
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
478
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
479 function s = process_scale_option (x, dim, scale_option)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
480 warning("off", "Octave:divide-by-zero");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
481 if (isnumeric (scale_option))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
482 s = scale_option;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
483 else
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
484 switch (scale_option)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
485 case "std"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
486 s = std (x, [], dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
487 case "mad"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
488 s = mad (x, 1, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
489 case "first"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
490 dim_vector = repmat ({':'}, ndims(x), 1);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
491 dim_vector{dim} = 1;
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
492 s = x(dim_vector{:});
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
493 case "iqr"
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
494 s = iqr (x, dim);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
495 endswitch
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
496 endif
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
497 warning("on", "Octave:divide-by-zero")
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
498 endfunction
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
499
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
500 ## no method specified, using zscore & std
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
501 %!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
502 %!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
503 %!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
504 %!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
505 %!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
506 %!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
507
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
508 ## Method: zscore, [std, robust]
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
509 %!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
510 %!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
511 %!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
512 %!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
513 %!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
514 %!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
515
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
516 ## Method: norm [1, 2, inf]
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
517 %!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
518 %!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
519 %!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
520 %!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
521 %!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
522 %!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
523 %!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
524 %!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
525
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
526 ## Method: range
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
527 %!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
528 %!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
529 %!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
530
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
531 ## Method: scale [mad first iqr number]
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
532 %!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
533 %!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
534 %!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
535
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
536 %!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
537 %!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
538 %!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
539
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
540 %!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
541 %!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
542 %!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
543 %!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
544 %!test
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
545 %! 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
546 %! 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
547 %! 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
548 %! assert (normalize (x, 3, "scale", "first"), y3);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
549 %! assert (normalize (x, 4, "scale", "first"), y4);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
550
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
551 %!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
552 %!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
553 %!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
554 %!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
555
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
556 ## Method: center [mean median number]
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
557 %!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
558 %!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
559 %!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
560 %!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
561 %!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
562
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
563 ## Method: medianiqr
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
564 %!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
565 %!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
566 %!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
567 %!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
568
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
569 ##test nan and inf
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
570 %!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
571 %!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
572 %!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
573 %!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
574 %!assert (normalize (Inf), NaN)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
575 %!assert (normalize (NaN), NaN)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
576 %!assert (normalize ([Inf, NaN]), [NaN, NaN])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
577 %!assert (normalize ([Inf, NaN]'), [NaN, NaN]')
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
578 %!assert (normalize ([Inf, Inf], 1), [NaN, NaN])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
579 %!assert (normalize ([Inf, Inf], 2), [NaN, NaN])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
580 %!assert (normalize ([Inf, Inf]', 1), [NaN, NaN]')
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
581 %!assert (normalize ([Inf, Inf]', 2), [NaN, NaN]')
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
582 %!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
583
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
584 ##Two input methods, must be scale and center
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
585 %!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
586 %!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
587
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
588 ##Test additional outputs
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
589 %!test
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
590 %! [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
591 %! 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
592 %! [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
593 %! 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
594 %! [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
595 %! 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
596 %! [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
597 %! 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
598 %! [z, c, s] = normalize ([2,0,-2;0,2,0;-2,-2,2],"norm",2);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
599 %! assert ({z, c, s}, {[1,0,-1;0,1,0;-1,-1,1]*(sqrt(2)/2), 0, [1 1 1]*2*sqrt(2)}, eps)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
600 %! [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
601 %! 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
602 %! [z, c, s] = normalize (magic (3),"range",[-1 1]);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
603 %! 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)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
604 %! [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
605 %! 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
606 %! [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
607 %! 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
608 %! [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
609 %! 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
610 %! [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
611 %! 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
612 %! [z, c, s] = normalize ([1 2 3 10], "center", "mean");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
613 %! assert ({z, c, s}, {[-3 -2 -1 6], 4, 1})
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
614 %! [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
615 %! 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
616 %! [z, c, s] = normalize (magic (3), "medianiqr");
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
617 %! 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)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
618 %! [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
619 %! 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
620 %! [z, c, s] = normalize (Inf);
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
621 %! assert ({z, c, s}, {NaN, Inf, NaN});
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
622
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
623 ## 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
624 ## 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
625 %!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
626 %!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
627
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
628 ## Test input validation
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
629 %!error normalize ()
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
630 %!error normalize (1, 2, 3)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
631 %!error <X must be a numeric> normalize (['A'; 'B'])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
632 %!error <DIM must be a positive scalar integer> normalize (1, ones (2,2))
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
633 %!error <DIM must be a positive scalar integer> normalize (1, 1.5)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
634 %!error <DIM must be a positive scalar integer> normalize (1, -1)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
635 %!error <DIM must be a positive scalar integer> normalize (1, [1 2])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
636 %!error <DIM must be a positive scalar integer> normalize (1, 0)
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
637 %!error <may not be combined> normalize ([1 2 3], "norm", "zscore")
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
638 %!error <unknown method> normalize ([1 2 3], "norm", "foo")
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
639 %!error <too many methods specified> normalize ([1 2 3], "scale", "center", "norm")
31353
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
640 %!error <'norm' option must be a positive scalar or Inf> normalize ([1 2 3], "norm", -1)
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
641 %!error <'norm' option must be a positive scalar or Inf> normalize ([1 2 3], "norm", -Inf)
fa3ae8fd8449 normalize.m: correct error messages split across lines (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents: 31352
diff changeset
642 %!error <'norm' option must be a positive scalar or Inf> normalize ([1 2 3], "norm", [1 2])
31351
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
643 %!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
644 %!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
645 %!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
646 %!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
647 %!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
648 %!error <scale value must be a scalar> normalize ([1 2 3], "scale", [1 2; 3 4])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
649 %!error <center shift must be a scalar value> normalize ([1 2 3], "center", [1 2])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
650 %!error <center shift must be a scalar value> normalize ([1 2 3], "center", [1 2]')
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
651 %!error <center shift must be a scalar value> normalize ([1 2 3], "center", [1 2; 3 4])
ecfb41743fd2 Implement new function 'normalize' (bug #55765)
Nicholas R. Jankowski <jankowski.nicholas@gmail.com>
parents:
diff changeset
652 %!error <unknown method> normalize ([1 2 3], "foo")