【问题标题】:How to normalize an array between min and max value如何在最小值和最大值之间标准化数组
【发布时间】:2020-04-06 18:56:01
【问题描述】:

我有一个数组:

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] 之间的数据进行归一化。但是,由于我有二维数组,我需要在某个最小值/最大值之间标准化每一行,例如:(-.1, .1)

我正在使用 Python 和 MATLAB,希望我能用 python 或 matlab 得到答案。

【问题讨论】:

    标签: python matlab normalization


    【解决方案1】:

    在 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
    

    【讨论】:

      【解决方案2】:

      最简单的方法是进行最小-最大归一化

      np.array(list)
      array = list[:] - np.min(list) / (np.max(list) - np.min(list))
      array = 2*array - 1
      

      现在数组在 -1 和 1 之间归一化

      【讨论】:

        【解决方案3】:

        在 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
        

        【讨论】:

          【解决方案4】:

          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.
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-09
            • 1970-01-01
            • 2020-07-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多