【问题标题】:Min-max scaling along rows in numpy array沿numpy数组中的行的最小最大缩放
【发布时间】:2019-03-05 13:20:12
【问题描述】:

我有一个 numpy 数组,我想使用以下过程将每行的值重新调整为 0 到 1 之间的值:

如果给定行的最大值为X_max,而该行的最小值为X_min,则该行中给定条目 (X) 的重新缩放值 (X_rescaled) 应变为:

X_rescaled = (X - X_min)/(X_max - X_min)

例如,让我们考虑以下数组 (arr):

arr = np.array([[1.0,2.0,3.0],[0.1, 5.1, 100.1],[0.01, 20.1, 1000.1]])
print arr
array([[  1.00000000e+00,   2.00000000e+00,   3.00000000e+00],
   [  1.00000000e-01,   5.10000000e+00,   1.00100000e+02],
   [  1.00000000e-02,   2.01000000e+01,   1.00010000e+03]])

目前,我正在尝试通过以下方式使用来自scikit-learnMinMaxscaler

from sklearn.preprocessing import MinMaxScaler
result = MinMaxScaler(arr)

但是,我不断得到我的初始数组,即result 与上述方法中的arr 相同。我究竟做错了什么?

如何以我需要的方式缩放数组 arr(沿每个轴的最小-最大缩放?)提前致谢。

【问题讨论】:

    标签: python arrays numpy scikit-learn


    【解决方案1】:

    MinMaxScaler 使用起来有点笨拙; sklearn.preprocessing.minmax_scale 更方便。这沿列操作,所以使用转置:

    >>> import numpy as np
    >>> from sklearn import preprocessing
    >>>                                                                                                                 
    >>> a = np.random.random((3,5))                                                            
    >>> a                                                                                                               
    array([[0.80161048, 0.99572497, 0.45944366, 0.17338664, 0.07627295],                                                
           [0.54467986, 0.8059851 , 0.72999058, 0.08819178, 0.31421126],                                                
           [0.51774372, 0.6958269 , 0.62931078, 0.58075685, 0.57161181]])                                               
    >>> preprocessing.minmax_scale(a.T).T                                                                
    array([[0.78888024, 1.        , 0.41673812, 0.10562126, 0.        ],                                                
           [0.63596033, 1.        , 0.89412757, 0.        , 0.314881  ],                                                
           [0.        , 1.        , 0.62648851, 0.35384099, 0.30248836]])                                               
    >>>
    >>> b = np.array([(4, 1, 5, 3), (0, 1.5, 1, 3)])
    >>> preprocessing.minmax_scale(b.T).T
    array([[0.75      , 0.        , 1.        , 0.5       ],
           [0.        , 0.5       , 0.33333333, 1.        ]])
    

    【讨论】:

    • 感谢您的回答。显示的方法(preprocessing.minmax_scale(a.T).T )是否根据条目所在的行重新缩放条目(这是我需要的)?
    • @JiWonSong 是的,我将添加一个示例,以便更容易看到。
    • 谢谢保罗。你的回答很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 2022-08-18
    • 1970-01-01
    • 2019-06-25
    • 2018-12-28
    • 2011-05-13
    • 2012-01-29
    相关资源
    最近更新 更多