展平2D数组1D总和

时间:2019-10-16 06:37:52

标签: python arrays numpy python-imaging-library

我试图了解为什么我的问题解决方案不起作用。

我有一个2D数组,其元素是RGB数组,例如:[[30,60,90],[30,51,255],..]

我试图将每个数组展平为RGB的平均值,因此对于上面的2D数组应该是:[60,366,..]

这是我的尝试:

# import image processing libraries
from __future__ import print_function
import sys
from PIL import Image
import numpy as np

# open a specific image from file and save it as an image object to print its info
im = Image.open("ascii-pineapple.jpg", 'r')
print(im.format, im.size, im.mode)

# save image pixels as a list of tuples in the form of RGB
pix_val = list(im.getdata())
pix_array = [list(item) for item in pix_val] #turn tuples into arrays
brightness_array = []

for i, x in enumerate(pix_array):
    brightness_array[i] = sum(x)
    print(str(i) + " " + str(sum(x)))

因此对于我的for循环,它告诉我IndexError: list assignment index out of range。这对我来说很奇怪,因为print语句显示了数组的所有索引,以及将包含在该索引中的元素。

对此我是陌生的,因此,任何指出我做错事情的帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

您有一个空的list brightness_array = []。那里什么都没有。您不能为空的list编制索引。也许您想要brightness_array.append(sum(x))

将代码更改为:

brightness_array = []
for i, x in enumerate(pix_array):
    brightness_array.append(sum(x)) # will append the `sum` to the `brightness_array`
    print("{}  {}".format(i, sum(x)))

答案 1 :(得分:1)

这是一种方法:

pix_array = [list(item) for item in pix_val]
brightness_array = [sum(map(lambda x:x/3,sublst)) for sublst in pix_array]