python - 展平 2D 数组 1D Sum
问题描述
我试图了解为什么我对问题的解决方案不起作用。
我有一个二维数组,它的元素是一个 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 语句显示了数组的所有索引,以及将进入该索引的元素。
我是新手,所以任何指出我做错了什么的帮助都将不胜感激。谢谢!
解决方案
你有一个空的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)))
推荐阅读
- refactoring - 如何通过另一个函数获取结果过程的倍数函数?
- node.js - 为什么 NPM 模块不能完全平坦,包括依赖项?
- node.js - 如何从 lambda 中的 Secure REST API 获取数据以获取 Alexa 技能?
- reactjs - 为什么 Webpack / Babel 在不需要时将 React 添加到构建中?
- node.js - Cloudinary 节点包出错 - 意外令牌
- c - C 语言中的 UberEats 系统 - 文件处理
- office365 - 通过 Graph API 将规则发布到共享收件箱 - 权限错误
- javascript - js-grid 过滤器不呈现
- django - django 中的 DIRS 和 APP_DIRS 是什么?它有什么用?
- multithreading - 未能延迟初始化 Map 的角色集合