Нормализовать столбцы массива numpy в python
у меня есть массив numpy, где каждая ячейка определенной строки представляет значение для объекта. Я храню их все в матрице 100*4.
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
любая идея, как я могу нормализовать строки этого numpy.массив, где каждое значение между 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)
спасибо заранее :)
2 ответов
если я правильно понимаю, что вы хотите сделать, это разделить на максимальное значение в каждом столбце. Вы можете сделать это легко, используя вещания.
начиная с вашего примера массива:
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.
вы можете использовать sklearn.препроцессирование:
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 ]]