小编典典

在python中标准化numpy数组列

python

我有一个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)

提前致谢 :)


阅读 215

收藏
2020-12-20

共1个答案

小编典典

如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。

从示例数组开始:

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。

2020-12-20