我有一个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)
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.max(0)
(ncols,)
x
x_normed = (x - x.min(0)) / x.ptp(0)
在这里,x.ptp(0)返回沿着轴0的“峰到峰”(即范围,最大值-最小值)。这种规范化还保证每列中的最小值为0。
x.ptp(0)
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 ]]
2条答案
按热度按时间yx2lnoni1#
如果我没理解错的话,您要做的是除以每列中的最大值,您可以使用broadcasting轻松地完成此操作。
从示例数组开始:
x.max(0)
取第0维(即行)上的最大值。这将为您提供一个大小为(ncols,)
的向量,其中包含每列中的最大值。然后,您可以将x
除以此向量,以便规范化您的值,使每列中的最大值缩放为1。如果
x
包含负值,则需要先减去最小值:在这里,
x.ptp(0)
返回沿着轴0的“峰到峰”(即范围,最大值-最小值)。这种规范化还保证每列中的最小值为0。k3bvogb12#
您可以使用sklearn.预处理: