ValueError:没有足够的值来解包(预期2,got1)

时间:2017-09-02 20:48:04

标签: python numpy

我正在尝试将图像转换为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)

1 个答案:

答案 0 :(得分:0)

当您构建这样的数组时,请确保您了解所获得的数据。特别要验证形状和dtype。

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

nx,ny = np.shape(matrix)

这样解压缩只有matrix为2d时才有效,也就是说,它的形状是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无法将它们组装成更高维的数组。相反,它决定制作一个1d对象数组 - 一个数组数组。

总之,请确保您了解matrix的构造方式及其产生的结果。

nx, ny = ...可以派上用场,但这是不可原谅的。如果尺寸错误,则会在没有太多信息的情况下引发错误。