如何规范化最小值和最大值之间的数组
How to normalize an array between min and max value
我有一个数组:
list = [[2310.01, 2640.14, 2710.63, 2926, 2700.12],
[2014.45, 2160, 2430.65, 2700.65, 2714.63]]
我需要规范化 (min=-.1, max=.1)
之间二维列表中的每一行。所有方法都可以对[0,1]
或[-1,1]
之间的数据进行归一化。但是,由于我有 2D 数组,我需要在某些 min/max 值之间对每一行进行归一化,例如:(-.1, .1)
.
我正在使用Python和MATLAB,希望我能用python或matlab得到答案。
在 MATLAB 中,您可以按如下方式进行:
归一化到范围 [-1, 1]:
norm_list = ((list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2)))*2 - 1
不是最好的,但我想到的最快的解决方案...
更新 - 规范化到一般目标范围:
lo_out = -0.1
hi_out = 0.1
range_out = hi_out - lo_out
%Normalize to range [0, 1]:
%norm_list = (list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2))
%Normalize to range [lo_out, hi_out]:
lo_in = min(list, [], 2); %Minimum of each row
hi_in = max(list, [], 2); %Maximum of each row
range_in = hi_in - lo_in; %Range of each row
norm_list = ((list - lo_in) ./ range_in) * range_out + lo_out
最简单的方法是进行最小-最大归一化
np.array(list)
array = list[:] - np.min(list) / (np.max(list) - np.min(list))
array = 2*array - 1
现在数组在 -1 和 1 之间标准化
在R2018a及之后的版本中,可以直接在MATLAB中使用normalize函数来实现
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
normalize(A,2,'range',[-1 1])
ans =
1.0000 -1.0000 0.4286
-1.0000 0 1.0000
-0.4286 1.0000 -1.0000
Matlab 中有一个名为“mapminmax”的强大函数就是为这项工作开发的。
x=data;
[x_normalized, PS]=mapinmax(x',0,1); % It makes normalization in the range of 0-1.
x_normalized=x_normalized';
该函数检查行,出于这些原因,我们必须执行 x' 操作,因为我们要根据列进行规范化。
PS参数将代表我们要在归一化之前将其转换为实际值时所需的参数。
x = (mapminmax('reverse',x_normalized',PS))' % Obtaining the true value of x.
我有一个数组:
list = [[2310.01, 2640.14, 2710.63, 2926, 2700.12],
[2014.45, 2160, 2430.65, 2700.65, 2714.63]]
我需要规范化 (min=-.1, max=.1)
之间二维列表中的每一行。所有方法都可以对[0,1]
或[-1,1]
之间的数据进行归一化。但是,由于我有 2D 数组,我需要在某些 min/max 值之间对每一行进行归一化,例如:(-.1, .1)
.
我正在使用Python和MATLAB,希望我能用python或matlab得到答案。
在 MATLAB 中,您可以按如下方式进行:
归一化到范围 [-1, 1]:
norm_list = ((list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2)))*2 - 1
不是最好的,但我想到的最快的解决方案...
更新 - 规范化到一般目标范围:
lo_out = -0.1
hi_out = 0.1
range_out = hi_out - lo_out
%Normalize to range [0, 1]:
%norm_list = (list - min(list, [], 2)) ./ (max(list, [], 2) - min(list, [], 2))
%Normalize to range [lo_out, hi_out]:
lo_in = min(list, [], 2); %Minimum of each row
hi_in = max(list, [], 2); %Maximum of each row
range_in = hi_in - lo_in; %Range of each row
norm_list = ((list - lo_in) ./ range_in) * range_out + lo_out
最简单的方法是进行最小-最大归一化
np.array(list)
array = list[:] - np.min(list) / (np.max(list) - np.min(list))
array = 2*array - 1
现在数组在 -1 和 1 之间标准化
在R2018a及之后的版本中,可以直接在MATLAB中使用normalize函数来实现
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
normalize(A,2,'range',[-1 1])
ans =
1.0000 -1.0000 0.4286
-1.0000 0 1.0000
-0.4286 1.0000 -1.0000
Matlab 中有一个名为“mapminmax”的强大函数就是为这项工作开发的。
x=data;
[x_normalized, PS]=mapinmax(x',0,1); % It makes normalization in the range of 0-1.
x_normalized=x_normalized';
该函数检查行,出于这些原因,我们必须执行 x' 操作,因为我们要根据列进行规范化。 PS参数将代表我们要在归一化之前将其转换为实际值时所需的参数。
x = (mapminmax('reverse',x_normalized',PS))' % Obtaining the true value of x.