Numpy数组缩放不返回正确的值

时间:2015-08-01 17:56:58

标签: python arrays numpy

我有一个numpy数组,我想通过缩放所有列来改变(例如,列中的所有值除以该列中的最大值,以便所有值都<1)。

数组的示例输出是

[2. 0. 367.877 ..., - 0.358 51.547 -32.633]

[2. 0. 339.824 ..., - 0.33 52.562 -27.581]

[3. 0. 371.438 ..., - 0.406 55.108 -35.573]

我尝试通过以下代码扩展数组(data_in):

#normalize the data_in array 
data_in_normalized = data_in / data_in.max(axis=0)

但是,data_in_normalized的输出是:

[0.5 0. 0.95437199 0.89363654 0.80751792]

[0.46931238 0.50660904 0.5003812 0.91250444 0.625]

[0.96229214 0.89483109 0.86989432 0.86491407 0.71287646]

[-23.90909091 0.34346373 1.25110652 0. 0.8537859 1. 1.。]

显然,它没有正常化 - 有多个区域的最大值> 1。有没有更好的方法来缩放数据,或者我是否错误地使用max()函数(例如,列之间是否共享max()值?)

1 个答案:

答案 0 :(得分:2)

IIUC,并不是列之间共享的最大值,而是您可能希望除以最大绝对值,因为您有两个符号的元素。 1>毕竟是-100,所以如果用[1,-100]除以列的最大值,则不会有任何改变。

例如:

>>> data_in = np.array([[-3,-2],[2,1]])
>>> data_in
array([[-3, -2],
       [ 2,  1]])
>>> data_in.max(axis=0)
array([2, 1])
>>> data_in / data_in.max(axis=0)
array([[-1.5, -2. ],
       [ 1. ,  1. ]])

>>> data_in / np.abs(data_in).max(axis=0)
array([[-1.        , -1.        ],
       [ 0.66666667,  0.5       ]])