Если я правильно понимаю, что вы хотите сделать, это разделить на максимальное значение в каждом столбце. Вы можете сделать это легко, используя 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)
возвращает «пик-пик» (т.е. диапазон, макс - мин) вдоль оси 0. Эта нормализация также гарантирует, что минимальное значение в каждом столбце будет 0.
Просто, чтобы быть ясным: это массив NumPy или Pandas DataFrame? –
При программировании важно быть конкретным: 'set' является конкретным объектом в Python, и вы не можете иметь набор массивов numpy. Python не имеет матрицы, но numpy делает, и этот тип 'matrix' не совпадает с numpy' array/ndarray' (который сам по себе отличается от типа массива Python, который не совпадает с 'list'). И ни один из них не является пандами 'DataFrame's .. – DSM
@ajcr жаль опечаток. Я редактировал свой вопрос. Спасибо – ahajib