Python:迭代一个sub-2d(嵌套)数组来计算它的总和

时间:2012-08-31 14:19:16

标签: python lambda

我想实现这个功能:计算图像的平均值(或总和)rgb值。更具体地,图像由元组的2-d阵列组成。这是我的代码:

rgb = [0.0, 0.0, 0.0]
for r in range(0, 3):
    for ii in range(x, x + X_STEP):
        for jj in range(y, y + Y_STEP):
            rgb[r] += src_pix[ii][jj][r]
rgb = map(lambda a: a / X_STEP / Y_STEP, rgb) #this line does not matter, it is just the difference between sum and average

问题如何美化它,或使它更加pythonic?也许嵌套的map仍然不是最好的。我希望它就像使用itertools

这个link提供了一个接近我的问题的解决方案。另一个link可能与我的代码重复,但他没有问同样的问题。

非常感谢。

修改 我实际上希望计算一个二维二维数组的总和。

1 个答案:

答案 0 :(得分:2)

看起来你正在使用PIL。如果是这样的话,我会使用numpy。

假设您使用的是PIL版本> = 1.1.6,您可以将PIL对象src_pix转换为numpy数组,如下所示:

np_pix = numpy.array(srx_pix)

然后使用numpy.sum

rgb = numpy.sum(np_pix)

或计算平均值(如上面的代码所示):

rgb = numpy.mean(np_pix)

对于旧版本的PIL,请使用numpy.asarray

如果要计算子阵列的总和,可以使用 slice 来获取该子阵列,如下所示:

rgb_slice = numpy.mean(np_pix[X_start:X_end,Y_start:Y_end])

<强>参考