如果var(另一个numpy数组)中的元素是> = 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)]
关于我做错的任何想法?
答案 0 :(得分:30)
正如我在对先前回答的评论中告诉你的那样,你需要使用:
c[a & b]
或
c[np.logical_and(a, b)]
原因是Python使用and
关键字来测试两个布尔值。数组如何成为布尔值?如果其中75%的项目为True
,那么它是True
还是False
?因此,numpy拒绝比较两者。
因此,您必须使用逻辑函数逐个元素地比较两个布尔数组(np.logical_and
)或二元运算符&
。
此外,出于索引目的,您确实需要一个布尔数组,其大小与您要编制索引的数组相同。 它必须是一个数组,你不能使用True/False
的列表:
原因是使用布尔数组告诉NumPy返回哪个元素。如果您使用True/False
列表,NumPy会将其解释为1/0
的整数列表,即索引,这意味着您要么获得数组的第二个元素或第一个元素。不是你想要的。
现在,您可以猜测,如果您想使用两个布尔数组a
或b
进行索引,请选择a
或b
为的项目没错,你要用
c[np.logical_or(a,b)]
或
c[a | b]
答案 1 :(得分:8)
在尝试对涉及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
通过两个>>> 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])
数组广播AND操作。
rbs = np.array([ish[4] for ish in realbooks])
但是,这样的布尔数组不能用于索引普通的Python列表,因此需要将其转换为数组:
{{1}}
答案 2 :(得分:0)
# 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]))
如果rectsPersist!=无: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()