Подтвердить что ты не робот

Нормализовать столбцы массива numpy в python

У меня есть массив numpy, где каждая ячейка определенной строки представляет значение для функции. Я храню их все в матрице 100 * 4.

A     B   C
1000  10  0.5
765   5   0.35
800   7   0.09  

Любая идея, как я могу нормализовать строки этого numpy.array, где каждое значение находится между 0 и 1?

Мой желаемый результат:

A     B    C
1     1    1
0.765 0.5  0.7
0.8   0.7  0.18(which is 0.09/0.5)

Заранее спасибо:)

4b9b3361

Ответ 1

Если я правильно понимаю, то, что вы хотите сделать, делится на максимальное значение в каждом столбце. Вы можете сделать это легко, используя broadcasting.

Начиная с вашего массива примеров:

import numpy as np

x = np.array([[1000,  10,   0.5],
              [ 765,   5,  0.35],
              [ 800,   7,  0.09]])

x_normed = x / x.max(axis=0)

print(x_normed)
# [[ 1.     1.     1.   ]
#  [ 0.765  0.5    0.7  ]
#  [ 0.8    0.7    0.18 ]]

x.max(0) принимает максимум за 0-е измерение (т.е. строки). Это дает вам вектор размера (ncols,), содержащий максимальное значение в каждом столбце. Затем вы можете разделить x на этот вектор, чтобы нормализовать ваши значения таким образом, чтобы максимальное значение в каждом столбце масштабировалось до 1.


Если x содержит отрицательные значения, вам нужно сначала вычесть минимум:

x_normed = (x - x.min(0)) / x.ptp(0)

Здесь x.ptp(0) возвращает "пик-к-пику" (т.е. диапазон, max-min) вдоль оси 0. Эта нормализация также гарантирует, что минимальное значение в каждом столбце будет 0.

Ответ 2

Вы можете использовать sklearn.preprocessing:

from sklearn.preprocessing import normalize
data = np.array([
    [1000, 10, 0.5],
    [765, 5, 0.35],
    [800, 7, 0.09], ])
data = normalize(data, axis=0, norm='max')
print(data)
>>[[ 1.     1.     1.   ]
[ 0.765  0.5    0.7  ]
[ 0.8    0.7    0.18 ]]