我目前正在使用numpy来创建一个数组。我想使用矢量化实现来更有效地获取位置(i,j)中元素的平均值。这些数组来自文件目录中的图像,这些图像都已标准化为固定大小。
但是,当我尝试添加图像数组时,每个元素的总和以a(mod 256)的形式返回。如何更改元素的最大值?
答案 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类型。