2015-08-01 4 views
0

У меня есть массив numpy, который я хочу изменить, масштабируя все столбцы (например, все значения в столбце делятся на максимальное значение в этом столбце, так что все значения равны < 1).Масштабирование массива Nump не возвращает правильные значения

Пробу выход массива

[2. 0. 367,877 ..., -0,358 51,547 -32,633]

[2. 0. 339,824 ..., -0,33 52,562 -27,581 ]

[3. 0. 371,438 ..., -0,406 55,108 -35,573]

Я попытался масштабирование массива (data_in) следующий код:

#normalize the data_in array 
data_in_normalized = data_in/data_in.max(axis=0) 

Однако выход data_in_normalized является:

[0,5 0. 0,95437199 0,89363654 0,80751792]

[0,46931238 0,50660904 0,91250444 0,5003812 0,625]

[0,96229214 0,89483109 0,86989432 0,86491407 0,71287646]

[- 23.90909091 0.34346373 1.25110652 0. 0.8537859 1. 1.]

Очевидно, что это не нормализовалось - существует несколько областей, где максимальная Значение imum> 1. Есть ли лучший способ масштабирования данных, или я неправильно использую функцию max() (например, значение max() разделяется между столбцами?)

ответ

2

IIUC, это не значит, что максимальное значение разделяется между столбцами , то вы, вероятно, хотите делить на максимум значение вместо этого, потому что у вас есть элементы обоих знаков. 1> -100, в конце концов, и поэтому, если вы разделите на максимум значение столбца с [1, -100], ничего не изменится.

Например:

>>> data_in = np.array([[-3,-2],[2,1]]) 
>>> data_in 
array([[-3, -2], 
     [ 2, 1]]) 
>>> data_in.max(axis=0) 
array([2, 1]) 
>>> data_in/data_in.max(axis=0) 
array([[-1.5, -2. ], 
     [ 1. , 1. ]]) 

но

>>> data_in/np.abs(data_in).max(axis=0) 
array([[-1.  , -1.  ], 
     [ 0.66666667, 0.5  ]]) 
Смежные вопросы