6

我正在编写一个脚本来将图像的一部分(代码中的“子矩阵”,如下所述)保存为 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
4

2 回答 2

4

错误消息告诉您问题所在。有太多的值需要解压。显然submatrix.shape长度大于 2。

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

>>> 高度, 宽度 = np.array([1,2], dtype = float)
>>> 高度,宽度 = np.array([1,2,3], dtype = float)
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ValueError:解包的值太多

类似的事情会导致您在submatrix履行上述角色方面遇到问题[1,2,3]

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

>>> x, y = (1, 2, 3)
回溯(最近一次通话最后):
  文件“”,第 1 行,在
ValueError:解包的值太多

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

于 2013-11-01T10:30:33.437 回答
2

每当我遇到这种情况时,我都会将输出设置为单个 var 并检查该 var 以查看里面的内容。

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

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

早期,我永远不会在声明的同一行使用序列解包,只是为了使调试更容易。然后我在行上设置了一个断点height, width,看看它为什么会导致问题。

blah = np.array(submatrix.shape, dtype = float) / dpi
height, width = blah
于 2013-11-01T15:17:03.043 回答