错误消息很好地解释了这一点:
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
什么应该bool(np.array([False, False, True]))
返回?你可以提出几个看似合理的论点:
(1) True
, 因为bool(np.array(x))
应该返回相同的bool(list(x))
,并且非空列表是 truelike;
(2) True
,因为至少有一个元素是True
;
(3) False
,因为并非所有元素都是True
;
这甚至没有考虑 N 维情况的复杂性。
因此,由于“具有多个元素的数组的真值不明确”,您应该使用.any()
or .all()
, 例如:
>>> v = np.array([1,2,3]) == np.array([1,2,4])
>>> v
array([ True, True, False], dtype=bool)
>>> v.any()
True
>>> v.all()
False
你可能想考虑np.allclose
如果您正在比较浮点数组:
>>> np.allclose(np.array([1,2,3+1e-8]), np.array([1,2,3]))
True