在python中规范化numpy数组列

xpszyzbs  于 2022-12-23  发布在  Python
关注(0)|答案(2)|浏览(163)

我有一个numpy数组,其中特定行的每个单元格代表一个特征的值,我将它们存储在一个100*4的矩阵中。

A     B   C
1000  10  0.5
765   5   0.35
800   7   0.09

你知道我如何规范化这个numpy.array中每个值都在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)
yx2lnoni

yx2lnoni1#

如果我没理解错的话,您要做的是除以每列中的最大值,您可以使用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。

k3bvogb1

k3bvogb12#

您可以使用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 ]]

相关问题