【问题标题】:ValueError: not enough values to unpack (expected 2, got1)ValueError:没有足够的值来解包(预期 2,得到 1)
【发布时间】:2017-09-02 20:48:04
【问题描述】:

我正在尝试将图像转换为 numpy 数组,当我这样做时,它给了我标题中提到的错误。 回溯错误来自以下行:

nx,ny = np.shape(matrix)

我的其余代码如下。我能有一些建议来解决这个问题吗?

#change the quoted part to change directory and
#file type
filelist = glob.glob('Desktop/*.png')

#set Matrix as the numpy array.
#change the second half were np
#is used to make the program 
#use a different set of data

matrix = np.array([np.array(Image.open(fname)) for fname in filelist])


#numpy array
nx,ny = np.shape(matrix)
CXY = np.zeros([ny, nx])
for i in range(ny):
    for j in range(nx):
        CXY[i,j] = np.max(matrix[j,i,:])

#Binary data
np.save('/home/l/Desktop/maximums.npy', CXY)
#Human readable data
np.savetxt('/home/l/Desktop/maximums.txt', CXY)

【问题讨论】:

  • 一个建议是包含您的完整回溯,以便我们知道您在哪里得到错误。
  • nx,ny = np.shape(matrix) 如果矩阵只有一维,这将是您的错误来源。
  • 能否包含错误回溯?
  • @DanielF 是正确的。我猜您正在使用np.array([np.array(Image.open(fname)) for fname in filelist]) 创建一个维度为1 的数组,因为列表理解将生成Image 对象的列表,这是不正确的。了解什么是 Image 以及为什么使用列表解析来加载数据需要更多详细信息。
  • 这称为解包。当你有一个可迭代的(列表、元组或任何支持索引的东西)时,像 x, y = point 这样的语法会获取 point[0]、point[1] 元素并将它们分别分配给 x、y。但是,如果没有 point[0] 或 point[1] 则会抛出异常

标签: python numpy


【解决方案1】:

当你像这样构造一个数组时,请确保你理解你得到了什么。尤其要验证 shape 和 dtype。

matrix = np.array([np.array(Image.open(fname)) for fname in filelist])

nx,ny = np.shape(matrix)

只有当matrix 是 2d 时,这样的解包才有效,也就是说,它的形状是 2 元素元组,2 个变量中的每一个都有一个元素。

此索引 matrix[j,i,:] 建议您期望 matrix 为 3d。这会产生一个解包错误,expected 2, got 3

CXY = np.zeros([ny, nx])
for i in range(ny):
    for j in range(nx):
        CXY[i,j] = np.max(matrix[j,i,:])

但实际错误告诉我们matrix 是1d。我怀疑它也是object dtype。也就是说,一维数组。

我猜测matrix 创作中发生了什么。 Image.open(fname) - 这是做什么的?打开文件?也读吗?为什么是 np.array() 包装器。但是让我们假设它加载了一个 2d 或 3d 图像数组。所有图像的大小都相同吗?如果它们不同,则外部np.array 无法将它们组装成更高维的数组。相反,它求助于制作一维对象数组 - 数组数组。

总之,请确保您了解matrix 是如何构造的,以及它产生了什么。

nx, ny = ... 可以很方便,但它是无情的。如果尺寸错误,它会在没有太多信息的情况下引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 2018-04-21
    • 1970-01-01
    • 2016-04-10
    • 2016-07-05
    • 2020-02-20
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多