分配给数组会更改数据类型

2024-05-29 03:10:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多维数组,其中包含需要标准化为0-1范围的灰度整数值。 更准确地说,所讨论的多维数组是一个数组,其中每个元素都包含表示特定图像的矩阵,并且这些矩阵(图像)中的每个矩阵(图像)都包含图像的像素,其整数值在0-255之间

以下是标准化函数:

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])

训练集图像的所有元素都是一个具有零值的整数矩阵

Python似乎记住了原始类型的矩阵——但为什么第一种赋值方法有效而第二种方法无效


Tags: 方法函数图像元素方式矩阵整数数组
1条回答
网友
1楼 · 发布于 2024-05-29 03:10:01

这是因为,通过像在第二个方法中那样重新分配给数组,执行规范化(将是一个float)得到的dtype会向下转换到数组dtpye,因此它会被覆盖

文件的Assigning values to indexed arrays部分提到了这一点,其中指出:

Note that assignments may result in changes if assigning higher types to lower types (like floats to ints) or even exceptions (assigning complex to floats or ints)


下面是一个从应用normalize函数的结果返回的示例:

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])

print(a)
array([[255, 255, 255],
       [  0,   0,   0]])

如果您执行以下操作,则同样适用:

a[:] = normalize(a)

print(a)
array([[0, 0, 0],
       [0, 0, 0]])

相关问题 更多 >

    热门问题