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

Any time I run into this, I set the output to a single var and the inspect that var to see what's inside.

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

98% of the time, I simply miscounted the array size. (i.e. X, Y, and Z) the other 2% is usually due to variable length arrays (which really suck).

Early on, I would never use sequence unpack on the same line as the declaration, just to make debugging easier. I then set a break point on the height, width line to see why it caused a problem.

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