Python 展平二维阵列1D和

Python 展平二维阵列1D和,python,arrays,numpy,python-imaging-library,Python,Arrays,Numpy,Python Imaging Library,我试图理解为什么我的解决方案不起作用 我有一个2D数组,它的元素是RGB数组,例如:[[30,60,90],[30,51,255],…] 我试图将每个数组展平为RGB的平均值,因此对于上面的2D数组,它将是:[60366,…] 以下是我的尝试: # import image processing libraries from __future__ import print_function import sys from PIL import Image import numpy as np

我试图理解为什么我的解决方案不起作用

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

我试图将每个数组展平为RGB的平均值,因此对于上面的2D数组,它将是:[60366,…]

以下是我的尝试:

# 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循环,它告诉我
索引器:列表分配索引超出范围
。这对我来说很奇怪,因为print语句显示了数组的所有索引,以及将进入该索引的元素


我是新来的,所以任何能指出我做错了什么的人都会很感激。谢谢

您有一个空的
列表
亮度\u数组=[]
。里面什么都没有。不能为空的
列表编制索引。也许您想要
brightness\u数组.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)))
这里有一个方法:

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

您有一个空的
列表
亮度\u数组=[]
。里面什么都没有。不能为空的
列表编制索引。也许您想要
brightness\u array.append(sum(x))
在Python中,列表不会通过简单地分配一个新索引而增长-它在javascript和matlab中会增长,但在Python中不会。是否
arr=np.array(im)
创建一个numpy数组?什么
形状
arr.sum(轴=-1)
对最后一个维度上的数组求和。您不需要迭代或使用列表。