为什么numpy数组中的max元素值为255?

时间:2016-12-05 20:18:59

标签: python python-2.7 numpy scipy

我目前正在使用numpy来创建一个数组。我想使用矢量化实现来更有效地获取位置(i,j)中元素的平均值。这些数组来自文件目录中的图像,这些图像都已标准化为固定大小。

但是,当我尝试添加图像数组时,每个元素的总和以a(mod 256)的形式返回。如何更改元素的最大值?

2 个答案:

答案 0 :(得分:1)

您的数组可能属于numpy.uint8类型,因此它们在达到256时会回绕。

如果要获得更大的结果,请使用astype将第一个参数转换为更大的数据类型,例如:

a = np.array(..., dtype=np.uint8)
b = np.array(..., dtype=np.uint8)
c = a.astype(np.uint32) + b

并且您将获得更大数据类型的结果数组。

Per @Eric,为了避免临时性,您可以使用the numpy add function(非方法)进行添加,传递dtype以使结果属于新类型,即使是输入没有转换,避免临时(至少在Python级别):

c = np.add(a, b, dtype=np.uint32)

答案 1 :(得分:0)

首先创建输出数组会更好:

average = numpy.zeros(a.shape, numpy.float32)
image = numpy.zeros_like(average)

然后遍历图像并将其添加到位:

for i in images:
    image[:] = function_that_reads_images_as_uint8(i)
    average += image
average /= len(images)

如果你在分割步骤中不需要精度,你可能会使用int类型。