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
— 输入数据
标量 | 向量 | 矩阵 | 多维数组 | 表 | 时间表
输入数据,指定为标量、向量、矩阵、多维数组、表或时间表。
如果 A
是数值数组并且类型为 single
,则输出的类型也是 single
。否则,输出的类型为 double
。
normalize
忽略 A
中的 NaN
值。
数据类型: double
| single
| table
| timetable
复数支持: 是
dim
— 运算维度
正整数标量
运算维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
对于表或时间表输入数据,不支持 dim
,并且分别对每个表或时间表变量进行运算。
method
— 归一化方法
"zscore"
(默认) | "norm"
| "scale"
| "range"
| "center"
| "medianiqr"
methodtype
— 方法类型
数组 | 表 | 二元素行向量 | 类型名称
方法类型,指定为数组、表、二元素行向量或类型名称,具体取决于指定的方法。
方法 | 方法类型选项 | 描述 |
---|---|---|
|
| 计算 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 中的每个表变量使用中心化表中名称相似的变量中的值进行中心化。 |
centertype
, scaletype
— 中心化和缩放方法类型
数组 | 表 | 类型名称
中心化和缩放方法类型,分别指定为 "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
— 要对其进行操作的表变量
表变量名称 | 标量 | 向量 | 元胞数组 | 模式 | 函数句柄 | 表 vartype
下标
要对其进行操作的表变量,指定为下表中的选项之一。DataVariables
值指示要填充输入表的哪些变量。
表中未由 DataVariables
指定的其他变量会传递给输出,而不会对其进行归一化。
索引方案 | 示例 |
---|---|
变量名称:
|
|
变量索引:
|
|
函数句柄:
|
|
变量类型:
|
|
示例: normalize(T,"DataVariables",["Var1" "Var2" "Var4"])
ReplaceValues
— 替换值指示符
true
或 1
(默认) | false
或 0
替换值指示符,当 A
是表或时间表时,指定为以下值之一:
true
或1
- 用包含归一化数据的表变量替换输入表变量。false
或0
- 用包含归一化数据的表变量追加输入表变量。
对于向量、矩阵或多维数组输入数据,不支持 ReplaceValues
。
示例: normalize(T,"ReplaceValues",false)
输出参数
N
— 归一化值
数组 | 表 | 时间表
归一化值,以数组、表或时间表形式返回。
除非 ReplaceValues
的值为 false
,否则 N
与 A
的大小相同。如果 ReplaceValues
的值是 false
,则 N
的宽度是输入数据宽度和指定的数据变量数目之和。
normalize
通常对输入表和时间表的所有变量进行运算,以下情况除外:
如果指定
DataVariables
,则normalize
只对指定的变量执行运算。如果您使用语法
normalize(T,"center",C,"scale",S)
来使用先前计算的参数C
和S
来归一化表或时间表T
,则normalize
会自动使用C
和S
中的变量名称来确定要对其进行运算的T
中的数据变量。
C
— 中心化值
数组 | 表
中心化值,以数组或表形式返回。
当 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
中名称相似的变量的中心化值。
S
— 缩放值
数组 | 表
缩放值,以数组或表形式返回。
当 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 值
z 值以标准差为单位测量数据点与均值的距离。标准化后的数据集均值为 0,标准差为 1,并保留原始数据集的形状属性(相同的偏斜度和峰度)。
对于具有均值 μ 和标准差 σ 的随机变量 X,值 x 的 z 值是 。对于具有均值 和标准差 S 的采样数据,数据点 x 的 z 值是
P-范数
具有 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% 的值的范围。如果数据的中位数为 Q2,数据下半部分的中位数为 Q1,数据上半部分的中位数为 Q3,则 。
当数据包含离群值(非常大或非常小的值)时,IQR 通常优于查看全部数据范围,因为 IQR 排除了数据中最大 25% 和最小 25% 的值。
中位数绝对偏差
数据集的中位数绝对偏差 (MAD) 是距数据中位数 的绝对偏差的中位数值:。因此,MAD 说明数据相对于中位数的变异性。
当数据包含离群值(非常大或非常小的值)时,MAD 通常优于使用数据的标准差,因为标准差对距均值的偏差求平方,从而使离群值的影响过大。相反,少量离群值的偏差不会影响 MAD 的值。
扩展功能
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 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
不支持
ReplaceValues
名称-值参数。当
"center"
和"scale"
的方法类型均为表并且未提供DataVariables
时,这些方法类型必须具有相同顺序的表变量名称。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
不支持语法
normalize(___,"medianiqr")
。不支持语法
normalize(___,"scale","iqr")
。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2018a 中推出R2022a: 追加归一化值
现在,通过将 ReplaceValues
名称-值参数设置为 false
,可以用包含归一化数据的表变量追加(而不是替换)输入表变量。
只有表和时间表输入数据支持 ReplaceValues
名称-值参数。
R2021a: 用相同的参数归一化多个数据集
返回并重用中心化并缩放归一化参数值来归一化后续数据集。例如,归一化数组 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 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)