如何规范化最小值和最大值之间的数组

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.