Python中numpy归一化相关问题

我始终找不到方法将结果变成浮点型,如图

试过的方法有,用astype方法,用float,用.9f,均失败(难道是我用错了?)

具体代码:

import numpy as np

Z = np.random.randint(10,20,(5,5))
Max = Z.max()
Min = Z.min()
for m in range(len(Z)):
    Z[m] = (Z[m]-Min)/(Max-Min)
print(Z)

所用Python版本为3.8版本

Z = Z.astype(float)

Z.astype(float)返回一个浮点数类型的结果。而这个astype不会修改Z本身。

import numpy as np
 
Z = np.random.randint(10,20,(5,5))
print(Z)
Z = Z.astype(float)
Max = Z.max()
Min = Z.min()
for m in range(len(Z)):
    Z[m] = (Z[m]-Min)/(Max-Min)
print(Z)

问题在于你这个Z的类型是np.int, 而不是np.float, 所以后续的运算中都是int

再3和4中间插入一行

Z = np.array(Z, np.float)

即可,

另外, np有广播机制, 这个for循环完全可以省去. 和下面的代码效果是一样的, for循环反而慢

Z = (Z-Min)/(Max-Min)

简单的话,可以使用sklearn.preprocessing.MinMaxScaler。