np.array - 解压缩的值太多了

时间:2013-11-01 10:24:49

标签: python arrays numpy

我正在编写一个脚本来保存图像的一部分("子矩阵"在代码中,在下面报告)作为tif文件。当我运行代码时,我收到以下错误:

height, width = np.array(submatrix.shape, dtype = float) / dpi
ValueError: too many values to unpack

如果不使用子矩阵,我使用像np.random.random((10,10))这样的随机矩阵,一切运行正常。你发现我做错了吗?

使用

import matplotlib.pyplot as plt
import math
import numpy as np

以下是错误所在的代码部分:

submatrix = im[x_min:x_max, y_min:y_max]
dpi = size_box
height, width = np.array(submatrix.shape, dtype = float) / dpi

2 个答案:

答案 0 :(得分:3)

错误消息告诉您问题所在。解包的价值太多了。显然submatrix.shape的长度大于2。

我不知道为什么会这样,因为我不知道im是什么。但是请看一下交互式提示中的以下输出:

>>> height, width = np.array([1,2], dtype = float)
>>> height, width = np.array([1,2,3], dtype = float)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: too many values to unpack

这样的问题导致submatrix问题导致[1,2,3]履行上述问题。

如果剥去所有numpy,这只是一个标准的序列解包错误。最简单的例子是:

>>> x, y = (1, 2, 3)
Traceback (most recent call last):
  File "", line 1, in 
ValueError: too many values to unpack

执行sequence unpacking时,赋值运算符左侧和右侧的序列必须具有相同的长度。

答案 1 :(得分:0)

任何时候我遇到这个,我将输出设置为单个var并检查var以查看其中的内容。

>>> blah = np.array(submatrix.shape, dtype = float) / dpi
>>> dir(blah)

98%的时间,我只是错误地计算了数组大小。 (即X,Y和Z)另外2%通常是由于可变长度数组(真的很糟糕)。

在早期,我绝不会在声明的同一行使用sequence unpack,只是为了简化调试。然后我在height, width行设置了一个断点,看看它为什么会引起问题。

blah = np.array(submatrix.shape, dtype = float) / dpi
height, width = blah