np.array-要取消固定的值太多

2024-10-06 14:24:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,将图像的一部分(下面报告的代码中的“submatrix”)保存为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

Tags: 代码importas错误np矩阵randomfloat
2条回答

错误消息告诉您问题所在。要解包的值太多。显然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时,赋值运算符左侧和右侧的序列必须具有相同的长度。

每当遇到这个问题时,我都会将输出设置为一个变量,然后检查该变量以查看其中的内容。

>>> 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

相关问题 更多 >