Минимальное максимальное масштабирование вдоль строк в массиве NumPy - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть пустой массив, и я хочу изменить масштаб значений в каждой строке до значений от 0 до 1, используя следующую процедуру:

Если максимальное значение в данной строке равно X_max, а минимальное значениевдоль этой строки будет X_min, тогда измененное значение (X_rescaled) данной записи (X) в этой строке должно стать:

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]])

В настоящее время я пытаюсь использовать MinMaxscaler из scikit-learn следующим образом:

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

Но я продолжаю получать свой начальныймассив, т.е. result оказывается таким же, как arr в вышеупомянутом методе.Что я делаю неправильно?

Как я могу масштабировать массив arr требуемым способом (минимальное или максимальное масштабирование по каждой оси?) Заранее спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018

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.        ]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...