如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。
从示例数组开始:
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。