numpy.ndarray分配问题

问题描述 投票:2回答:1

我有一个多维数组,其中包含灰度整数值,需要在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记得矩阵的原始类型,但是,为什么在第一种方式中赋值起作用而在第二种方式中不起作用?

python numpy machine-learning multidimensional-array numpy-ndarray
1个回答
1
投票
这是因为通过像第二种方法一样分配给数组,执行归一化后得到的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]])

© www.soinside.com 2019 - 2024. All rights reserved.