Var(another numpy array)の要素が> = 0および<=。1の場合、rbsのすべての要素を新しい配列に入れようとしています。ただし、次のコードを試すと、このエラーが発生します。
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
rbs = [ish[4] for ish in realbooks]
for book in realbooks:
var -= float(str(book[0]).replace(":", ""))
bidsred = rbs[(var <= .1) and (var >=0)]
私が間違っていることに関するアイデアはありますか?
前の回答へのコメントで述べたように、次のいずれかを使用する必要があります。
c[a & b]
または
c[np.logical_and(a, b)]
理由は、and
キーワードがPythonによって使用され、2つのブール値をテストするためです。配列をブール値にするにはどうすればよいですか?項目の75%がTrue
、それはTrue
またはFalse
ですか?したがって、numpyは2つの比較を拒否します。
そのため、論理関数を使用して、2つのブール配列を要素ごと(np.logical_and
)またはバイナリ演算子&
で比較する必要があります。
さらに、インデックスを作成するためには、インデックスを作成する配列と同じサイズのブール配列が本当に必要です。そして配列でなければなりません、代わりにTrue/False
のリストを使用することはできません:理由は、ブール配列を使用するとNumPyに返される要素がわかるからです。 True/False
のリストを使用する場合、NumPyはそれを1/0
のリストとして整数、つまりインデックスとして解釈します。つまり、配列の2番目または1番目の要素を取得します。あなたが望むものではありません。
推測できるように、インデックス付けに2つのブール配列a
またはb
を使用する場合は、a
またはb
のいずれかの項目を選択します本当です、あなたは使うでしょう
c[np.logical_or(a,b)]
または
c[a | b]
Numpy配列を含む比較式でPythonブール演算子(not
、and
、or
)を使用しようとすると、通常このエラーメッセージが表示されます。 、例えば.
>>> x = np.arange(-5, 5)
>>> (x > -2) and (x < 2)
Traceback (most recent call last):
File "<ipython-input-6-475a0a26e11c>", line 1, in <module>
(x > -2) and (x < 2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
そのような比較は、Pythonの他の比較とは対照的に、単一のブール値ではなくブール値の配列を作成するためです(ただし、既に知っているかもしれません)。
>>> x > -2
array([False, False, False, False, True, True, True, True, True, True], dtype=bool)
>>> x < 2
array([ True, True, True, True, True, True, True, False, False, False], dtype=bool)
あなたの問題の解決策の一部は、おそらくand
をnp.logical_and
に置き換えることです。これはnp.bool
の2つの配列でAND演算をブロードキャストします。
>>> np.logical_and(x > -2, x < 2)
array([False, False, False, False, True, True, True, False, False, False], dtype=bool)
>>> x[np.logical_and(x > -2, x < 2)]
array([-1, 0, 1])
ただし、このようなブール値の配列を使用して通常のPythonリストにインデックスを付けることはできないため、配列に変換する必要があります。
rbs = np.array([ish[4] for ish in realbooks])
# draw the previous original bounding boxes
if rectsPersist != None:
for (x, y, w, h) in rectsPersist:
cv2.rectangle(orig, (x, y), (x + w, y + h), (0, 0, 255), 2)
# draw the previous final bounding boxes
if pickPersist != None:
for (xA, yA, xB, yB) in pickPersist:
cv2.rectangle(image, (xA, yA), (xB, yB), (0, 255, 0), 2)
if not count % 1:
count = 0
image = imutils.resize(image, width=min(700, image.shape[1]))
if rectsPersist!= None:ValueError:複数の要素を持つ配列の真理値はあいまいです。 a.any()またはa.all()を使用します