我正在编写一个脚本来保存图像的一部分("子矩阵"在代码中,在下面报告)作为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
答案 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