【问题标题】:Can't reshape color palette tuples using numpy无法使用 numpy 重塑调色板元组
【发布时间】:2021-03-22 13:35:42
【问题描述】:

我有以下代码,它从一系列图像中获取调色板,并尝试使用 numpy reshape 来重塑输出。但是当我尝试重塑输出时,我得到错误无法将大小为 27 的数组重塑为形状 (3,3)。

Colors数组打印出来的输出是这样的

[(256,256,265),(256,256,265),(256,256,265),(256,256,265),(256,256,265),(256,256,265),(256,256,265),(256,256,265),(256,256,265)]

哪些是包含调色板的 9 个元组,据说可以重塑为 3 * 3 但是 numpy.reshape 一直说它是 27 项,不能重新整形为 3*3 数组, 我的问题是如何将此输出重塑为 3 * 3 数组

所以我在整形后需要的颜色数组应该是这样的:

colours=[
[(256,256,265),(256,256,265),(256,256,265)],
[(256,256,265),(256,256,265),(256,256,265)],
[(256,256,265),(256,256,265),(256,256,265)]
        ]

from PIL import Image
import numpy as np

array=[]
for row in range(1,4):
    for column in range(1,4):
        filename = '/storage/emulated/0/python/banana/banana_0'+str(row)+'_0'+str(column)+'.png'
        img = Image.open(filename)
        img.show()

        colors = img.getpixel((10,10))
        array.append(colors)

array=np.array(array)
box_array=array.reshape(3,3) 

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您需要使用完整的目标形状进行重塑。您的数组总共包含 27 个元素 当你这样做时:

    array = np.array(array)
    

    你获得了一个 (9, 3) 形状的数组,所以你不能在 (3, 3) 中重新调整它,而是在 (3, 3, 3) 中。

    你可以像这样继续:

    box_array = array.reshape(3, 3, 3)
    

    根据稍后在数组中更改的维度,您可以让 numpy 弄清楚。 例如,如果您的第 2 维和第 3 维始终为 (3, 3),那么您可以按如下方式重塑您的数组,numpy 将自动检测第 1 维:

    box_array = array.reshape(-1, 3, 3)
    

    相反,如果您的第 1 维和第 2 维始终为 (3, 3),那么您可以按如下方式重塑您的数组,numpy 将自动检测第 3 维:

    box_array = array.reshape(3, 3, -1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 2016-05-22
      • 2020-08-29
      • 2019-07-22
      • 2020-07-11
      • 2013-05-27
      相关资源
      最近更新 更多