我有一个numpy数组,其中特定行的每个单元格代表一个功能的值。我将它们全部存储在100 * 4矩阵中。
A B C 1000 10 0.5 765 5 0.35 800 7 0.09
知道如何将每个值都介于0和1之间的numpy.array的行标准化吗?
我想要的输出是:
A B C 1 1 1 0.765 0.5 0.7 0.8 0.7 0.18(which is 0.09/0.5)
提前致谢 :)
如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。
从示例数组开始:
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.max(0)
(ncols,)
x
如果x包含负值,则需要先减去最小值:
x_normed = (x - x.min(0)) / x.ptp(0)
在此,x.ptp(0)返回沿轴0的“峰到峰”(即范围,最大值-最小值)。此归一化还确保每一列的最小值将为0。
x.ptp(0)