我有一个多维数组,其中包含灰度整数值,需要在0到1之间的范围内对其进行规范化。更准确地说,所讨论的多维数组是一个数组,其中每个元素都包含代表特定图像的矩阵,每个矩阵(图像)都包含图像的像素,这些像素的整数值在0到255之间。
下面您可以找到标准化函数,它位于名为myUtils.py的模块中:
def normalize(x, mmin=0.0, mmax=255.0):
x = (x - mmin )/(mmax - mmin + 10**(-5))
return x
在主模块中,我以这种方式应用该功能:
trainingSet_Images = myUtils.normalize(trainingSet_Images)
结果正确是具有浮点值的矩阵数组。
但是以这种方式应用normalize函数:
for i in range(len(trainingSet_Images)):
trainingSet_Images[i] = myUtils.normalize(trainingSet_Images[i])
当我尝试打印trainingSet_Images的任何元素时,结果是一个整数矩阵,填充了零值。似乎python记得矩阵的原始类型,但是,为什么在第一种方式中赋值起作用而在第二种方式中不起作用?
dtype
(将是float
)被向下转换为数组dtpye
,因此它得到地板。这是一个例子:
a = np.array([[255,255,255],[0,255,255]])
normalize(a)
array([[0.99999996, 0.99999996, 0.99999996],
[0. , 0.99999996, 0.99999996]])
而在第二种方法中:
normalize(a[1]) # array([0. , 0.99999996, 0.99999996]) a[1] = normalize(a[1]) a array([[255, 255, 255], [ 0, 0, 0]])