我有一个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()值?)
答案 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 ]])