normalize
归一化数据
语法
说明
指定给定方法的归一化类型。例如,N = normalize(___,method,methodtype)normalize(A,"norm",Inf) 使用无穷范数归一化 A 中的数据。
同时使用 N = normalize(___,"center",centertype,"scale",scaletype)"center" 和 "scale" 方法。只有这两种方法可以一起使用。如果未指定 centertype 或 scaletype,则 normalize 将使用该方法的默认方法类型(中心化以使均值为 0 并按标准差缩放)。
此语法支持使用任意中心化和缩放类型同时执行这两个方法。例如,N = normalize(A,"center","median","scale","mad")。您也可以使用此语法指定以前计算的归一化的中心化和缩放值 C 和 S。例如,用 [N1,C,S] = normalize(A1) 归一化一个数据集并保存参数。然后,用 N2 = normalize(A2,"center",C,"scale",S) 对不同数据集重用这些参数。
使用一个或多个名称-值参量指定用于归一化的其他参数。例如,当 N = normalize(___,Name,Value)A 是表或时间表时,normalize(A,"DataVariables",datavars) 对 datavars 指定的变量进行归一化。
示例
通过计算 z 分数来归一化向量和矩阵中的数据。
创建一个向量 v 并计算 Z 分数,从而将数据归一化,使其均值为 0,标准差为 1。
v = 1:5; N = normalize(v)
N = 1×5
-1.2649 -0.6325 0 0.6325 1.2649
创建一个矩阵 B 并计算每列的 z 分数。然后,对每个行进行归一化。
B = magic(3)
B = 3×3
8 1 6
3 5 7
4 9 2
N1 = normalize(B)
N1 = 3×3
1.1339 -1.0000 0.3780
-0.7559 0 0.7559
-0.3780 1.0000 -1.1339
N2 = normalize(B,2)
N2 = 3×3
0.8321 -1.1094 0.2774
-1.0000 0 1.0000
-0.2774 1.1094 -0.8321
对向量 A 按其标准差进行缩放。
A = 1:5;
Ns = normalize(A,"scale")Ns = 1×5
0.6325 1.2649 1.8974 2.5298 3.1623
对 A 进行缩放,使其范围在 [0, 1] 区间内。
Nr = normalize(A,"range")Nr = 1×5
0 0.2500 0.5000 0.7500 1.0000
创建向量 A 并用它的 1-范数对其进行归一化。
A = 1:5;
Np = normalize(A,"norm",1)Np = 1×5
0.0667 0.1333 0.2000 0.2667 0.3333
对 A 中的数据进行中心化,使其均值为 0。
Nc = normalize(A,"center","mean")
Nc = 1×5
-2 -1 0 1 2
创建一个表,其中包含五个人的身高信息。
LastName = ["Sanchez";"Johnson";"Lee";"Diaz";"Brown"]; Height = [71;69;64;67;64]; T = table(LastName,Height)
T=5×2 table
LastName Height
_________ ______
"Sanchez" 71
"Johnson" 69
"Lee" 64
"Diaz" 67
"Brown" 64
按最大身高对身高数据进行归一化。
N = normalize(T,"norm",Inf,"DataVariables","Height")
N=5×2 table
LastName Height
_________ _______
"Sanchez" 1
"Johnson" 0.97183
"Lee" 0.90141
"Diaz" 0.94366
"Brown" 0.90141
创建一个包含实部和虚部的向量。
a = [1; 2; 3; 4]; b = [2; -2; 7; -7]; z = complex(a,b)
z = 4×1 complex
1.0000 + 2.0000i
2.0000 - 2.0000i
3.0000 + 7.0000i
4.0000 - 7.0000i
归一化复数向量。要在保持相位的同时缩放幅值,请按无穷范数或最大幅值进行缩放。使用 norm 方法指定 Inf 选项。该函数返回一个复平面单位向量。
N = normalize(z,"norm",Inf)N = 4×1 complex
0.1240 + 0.2481i
0.2481 - 0.2481i
0.3721 + 0.8682i
0.4961 - 0.8682i
验证归一化向量是否在复平面单位圆内。
Nmag = max(abs(N))
Nmag = 1
验证归一化向量和原始向量的对应元素之间的比率是否相同。
r = N ./ z
r = 4×1
0.1240
0.1240
0.1240
0.1240
验证归一化向量的相位角是否与原始向量的相位角相同。
ztheta = angle(z)
ztheta = 4×1
1.1071
-0.7854
1.1659
-1.0517
Ntheta = angle(N)
Ntheta = 4×1
1.1071
-0.7854
1.1659
-1.0517
归一化数据集,返回计算出的参数值,并重用这些参数以对另一个数据集应用相同的归一化。
创建一个包含两个变量 Temperature 和 WindSpeed 的时间表。然后用同样的变量创建第二个时间表,但使用的采样是一年后收集的。
rng default Time1 = (datetime(2019,1,1):days(1):datetime(2019,1,10))'; Temperature = randi([10 40],10,1); WindSpeed = randi([0 20],10,1); T1 = timetable(Temperature,WindSpeed,'RowTimes',Time1)
T1=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2019 35 3
02-Jan-2019 38 20
03-Jan-2019 13 20
04-Jan-2019 38 10
05-Jan-2019 29 16
06-Jan-2019 13 2
07-Jan-2019 18 8
08-Jan-2019 26 19
09-Jan-2019 39 16
10-Jan-2019 39 20
Time2 = (datetime(2020,1,1):days(1):datetime(2020,1,10))';
Temperature = randi([10 40],10,1);
WindSpeed = randi([0 20],10,1);
T2 = timetable(Temperature,WindSpeed,'RowTimes',Time2)T2=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 30 14
02-Jan-2020 11 0
03-Jan-2020 36 5
04-Jan-2020 38 0
05-Jan-2020 31 2
06-Jan-2020 33 17
07-Jan-2020 33 14
08-Jan-2020 22 6
09-Jan-2020 30 19
10-Jan-2020 15 0
将第一个时间表归一化。指定三个输出:归一化后的表,以及函数用于执行归一化的中心化和缩放参数值 C 和 S。
[T1_norm,C,S] = normalize(T1)
T1_norm=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2019 0.57687 -1.4636
02-Jan-2019 0.856 0.92885
03-Jan-2019 -1.4701 0.92885
04-Jan-2019 0.856 -0.4785
05-Jan-2019 0.018609 0.36591
06-Jan-2019 -1.4701 -1.6044
07-Jan-2019 -1.0049 -0.75997
08-Jan-2019 -0.26052 0.78812
09-Jan-2019 0.94905 0.36591
10-Jan-2019 0.94905 0.92885
C=1×2 table
Temperature WindSpeed
___________ _________
28.8 13.4
S=1×2 table
Temperature WindSpeed
___________ _________
10.748 7.1056
现在使用第一个归一化的参数值来归一化第二个时间表 T2。此方法确保 T2 中的数据以与 T1 相同的方式中心化并缩放。
T2_norm = normalize(T2,"center",C,"scale",S)
T2_norm=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 0.11165 0.084441
02-Jan-2020 -1.6562 -1.8858
03-Jan-2020 0.66992 -1.1822
04-Jan-2020 0.856 -1.8858
05-Jan-2020 0.2047 -1.6044
06-Jan-2020 0.39078 0.50665
07-Jan-2020 0.39078 0.084441
08-Jan-2020 -0.6327 -1.0414
09-Jan-2020 0.11165 0.78812
10-Jan-2020 -1.284 -1.8858
默认情况下,normalize 对 T2 中也存在于 C 和 S 中的全部变量进行操作。要归一化 T2 中的变量子集,请使用 DataVariables 名称-值参量指定要对其进行操作的变量。您指定的变量子集必须出现在 C 和 S 中。
将 WindSpeed 指定为要对其进行操作的数据变量。normalize 对该变量进行操作并原样返回 Temperature。
T2_partial = normalize(T2,"center",C,"scale",S,"DataVariables","WindSpeed")
T2_partial=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 30 0.084441
02-Jan-2020 11 -1.8858
03-Jan-2020 36 -1.1822
04-Jan-2020 38 -1.8858
05-Jan-2020 31 -1.6044
06-Jan-2020 33 0.50665
07-Jan-2020 33 0.084441
08-Jan-2020 22 -1.0414
09-Jan-2020 30 0.78812
10-Jan-2020 15 -1.8858
输入参数
输入数据,指定为标量、向量、矩阵、多维数组、表或时间表。
如果 A 是数值数组并且类型为 single,则输出的类型也是 single。否则,输出的类型为 double。
normalize 忽略 A 中的 NaN 值。
数据类型: double | single | table | timetable
复数支持: 是
运算维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
对于表或时间表输入数据,不支持 dim,并且分别对每个表或时间表变量进行运算。
方法类型,指定为数组、表、二元素行向量或类型名称,具体取决于指定的方法。
方法 | 方法类型选项 | 描述 |
|---|---|---|
|
| 计算 z 分数。对数据进行中心化以使其均值为 0,缩放数据以使其标准差为 1。 |
| 计算 z 分数。对数据进行中心化以使其均值为 0,缩放数据以使其中位数绝对偏差为 1。 | |
| 正数值标量(默认值为 2) | 按 p-范数缩放数据,其中 p 是正数值标量。 |
| 按 p-范数缩放数据,其中 p 是 Inf。无穷范数(或最大范数)与数据中元素的最大幅值相同。 | |
|
| 缩放数据以使其标准差为 1。 |
| 缩放数据以使其中位数绝对偏差为 1。 | |
| 按数据的第一个元素缩放数据。 | |
| 缩放数据以使其四分位差为 1。 | |
数值数组 | 按数值数组缩放数据。该数组必须具有与输入 A 兼容的大小。 | |
表 | 按表中的变量缩放数据。输入数据 A 中的每个表变量都使用缩放表中名称相似的变量的值进行缩放。 | |
| 二元素行向量(默认为 [0 1]) | 将数据范围重新缩放至 [a b],其中 a < b。 |
|
| 对数据进行中心化以使其均值为 0。 |
| 对数据进行中心化以使其中位数为 0。 | |
数值数组 | 按数值数组平移中心。该数组必须具有与输入 A 兼容的大小。 | |
表 | 按表中的变量平移中心。输入数据 A 中的每个表变量使用中心化表中名称相似的变量中的值进行中心化。 |
中心化和缩放方法类型,分别指定为 "center" 或 "scale" 方法的任何有效 methodtype 选项。有关每个方法的可用选项列表,请参阅 methodtype 参量说明。
示例: N = normalize(A,"center",C,"scale",S)
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。
示例: normalize(T,ReplaceValues=false)
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: normalize(T,"ReplaceValues",false)
要对其进行操作的表变量,指定为下表中的选项之一。DataVariables 值指示要填充输入表的哪些变量。
表中未由 DataVariables 指定的其他变量会传递给输出,而不会对其进行归一化。
| 索引方案 | 要指定的值 | 示例 |
|---|---|---|
变量名称 |
|
|
变量索引 |
|
|
函数句柄 |
|
|
变量类型: |
|
|
示例: normalize(T,"DataVariables",["Var1" "Var2" "Var4"])
替换值指示符,当 A 是表或时间表时,指定为以下值之一:
true或1- 用包含归一化数据的表变量替换输入表变量。false或0- 用包含归一化数据的表变量追加输入表变量。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues。
示例: normalize(T,"ReplaceValues",false)
输出参量
归一化值,以数组、表或时间表形式返回。
除非 ReplaceValues 的值为 false,否则 N 与 A 的大小相同。如果 ReplaceValues 的值是 false,则 N 的宽度是输入数据宽度和指定的数据变量数目之和。
normalize 通常对输入表和时间表的所有变量进行运算,以下情况除外:
如果指定
DataVariables,则normalize只对指定的变量执行运算。如果您使用语法
normalize(T,"center",C,"scale",S)来使用先前计算的参数C和S来归一化表或时间表T,则normalize会自动使用C和S中的变量名称来确定要对其进行运算的T中的数据变量。
中心化值,以数组或表形式返回。
当 A 是数组时,normalize 将 C 和 S 以数组形式返回,满足 N = (A - C) ./ S。C 中的每个值都是用于在指定维度上执行归一化的中心化值。例如,如果 A 是 10×10 数据矩阵,并且 normalize 在第一个维度上执行运算,则 C 是 1×10 向量,其中包含 A 中每列的中心化值。
当 A 是表或时间表时,normalize 以表形式返回 C 和 S,其中包含归一化的每个表变量的中心化值和缩放值的表,即 N.Var = (A.Var - C.Var) ./ S.Var。C 和 S 的表变量名称与输入中对应的表变量匹配。C 中的每个变量都包含用于归一化 A 中名称相似的变量的中心化值。
缩放值,以数组或表形式返回。
当 A 是数组时,normalize 将 C 和 S 以数组形式返回,满足 N = (A - C) ./ S。S 中的每个值都是用于在指定维度上执行归一化的缩放值。例如,如果 A 是 10×10 数据矩阵,并且 normalize 在第一个维度上执行运算,则 S 是 1×10 向量,其中包含 A 中每列的缩放值。
当 A 是表或时间表时,normalize 以表形式返回 C 和 S,其中包含归一化的每个表变量的中心化值和缩放值的表,即 N.Var = (A.Var - C.Var) ./ S.Var。C 和 S 的表变量名称与输入中对应的表变量匹配。S 中的每个变量都包含用于归一化 A 中名称相似的变量的缩放值。
详细信息
z 值以标准差为单位测量数据点与均值的距离。标准化后的数据集均值为 0,标准差为 1,并保留原始数据集的形状属性(相同的偏斜度和峰度)。
对于具有均值 μ 和标准差 σ 的随机变量 X,值 x 的 z 值是 。对于具有均值 和标准差 S 的采样数据,数据点 x 的 z 值是
具有 N 个元素的向量 v 的 p-范数的常规定义是
,其中 p 是任何正实数值、Inf 或 -Inf。p 的一些常见值是 1、2 和 Inf。
如果 p 为 1,则所得的 1-范数是向量元素的绝对值之和。
如果 p 为 2,则所得的 2-范数是向量的模或欧几里德长度。
如果 p 为
Inf,则 。
重新缩放通过沿数字线拉伸或压缩点来更改数据集中最小值和最大值之间的距离。数据的 z 分数会保留,因此分布的形状保持不变。
将数据 X 重新缩放到任意区间 [a b] 的方程是
如果 A 是常量,则 normalize 返回区间的下界(默认为 0)或 NaN(当指定的区间包含 Inf 时)。
虽然 normalize 和 rescale 函数都可以将数据重新缩放到任意区间,但 rescale 还允许将输入数据裁剪到指定的最小值和最大值。
数据集的四分位差 (IQR) 说明对值进行排序时中间 50% 的值的范围。如果 Q1 是数据的第 25 个百分位数,Q3 是数据的第 75 个百分位数,则 。
如果 A 是常量,则 A 的四分位差为 0,但如果值缺失或为无穷大,则 A 的四分位差为 NaN。
当数据包含离群值(非常大或非常小的值)时,IQR 通常优于查看全部数据范围,因为 IQR 排除了数据中最大 25% 和最小 25% 的值。
数据集的中位数绝对偏差 (MAD) 是距数据中位数 的绝对偏差的中位数值:。因此,MAD 说明数据相对于中位数的变异性。
当数据包含离群值(非常大或非常小的值)时,MAD 通常优于使用数据的标准差,因为标准差对距均值的偏差求平方,从而使离群值的影响过大。相反,少量离群值的偏差不会影响 MAD 的值。
扩展功能
normalize 函数支持 tall 数组,但存在以下使用说明和限制:
不支持输出
C和S。无法同时指定
"center"和"scale"方法。"center"支持的方法类型有:"mean"、"median"或数值标量。"scale"支持的方法类型有:"std"、"mad"、"first"或数值标量。DataVariables名称-值参量无法指定函数句柄。需要在第一个维度上计算中位数或四分位差的归一化方法仅支持 tall 列向量数据。这包括方法
normalize(___,"zscore","robust")、normalize(___,"scale","mad")、normalize(___,"scale","iqr")、normalize(___,"center","median")和normalize(___,"medianiqr")。
有关详细信息,请参阅tall 数组。
用法说明和限制:
当
"center"和"scale"的方法类型均为表并且未提供DataVariables时,这些方法类型必须具有相同顺序的表变量名称。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
normalize 函数完全支持 GPU 数组。要在 GPU 上运行该函数,请将输入数据指定为 gpuArray (Parallel Computing Toolbox)。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
用法说明和限制:
不支持语法
normalize(___,"medianiqr")。不支持语法
normalize(___,"scale","iqr")。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2018a 中推出现在,通过将 ReplaceValues 名称-值参量设置为 false,可以用包含归一化数据的表变量追加(而不是替换)输入表变量。
只有表和时间表输入数据支持 ReplaceValues 名称-值参量。
返回并重用中心化并缩放归一化参数值来归一化后续数据集。例如,归一化数组 A,然后用相同的参数归一化数组 B。
[Anorm,C,S] = normalize(A); Bnorm = normalize(B,"center",C,"scale",S);
新输出(即中心化值 C 和缩放参数 S)允许在后面的归一化步骤中重用。同时指定 "center" 和 "scale" 归一化方法。只有这两种归一化方法可以同时指定。
当 method 为 "center" 或 "scale" 时,methodtype 的可能值包括数组和表。虽然这些 methodtype 值旨在用于新输出 C 和 S,但您也可以自行计算要指定的归一化参数。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
