问题描述
在对 array 数组进行值的操作时,经常会出现 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 。这句话的意思是 值错误:包含一个以上元素的数组的真值是不明确的,要使用a.any()或a.all()。
例如,现有两个数组
A = array([
[0, 1, 2],
[1, 2, 3],
[2, 3, 4]
])
B = array([
[4, 3, 2],
[3, 2, 1],
[2, 1, 0]
])
当我们执行 A==B
时, 我们可以得到
[[False False True]
[False True False]
[ True False False]]
的结果,这说明在 Numpy 中,数组的比较是两个数组对应的位置进行比较的。
当两个数组大小不一样时会抛出 DeprecationWarning: elementwise comparison failed; this will raise an error in the future. 的错误
如果我们试图把 A==B
当成 if 条件,则会出现 ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 错误
原因分析
Numpy 对逻辑表达式的判别不清楚,如果目标是逻辑相等则由于两边值都不为空而返回 True,如果目标是数值相等则由于 A 和 B 两个数组在数值上并不相等而返回 False,因此报错。
解决办法
使用 a.any()
或者 a.all()
a.any()
表示存在一个为 True 就返回 True,否则返回False。A 和 B 存在相同位置上的值相同的数字,因此返回 True
a.all()
表示只有所有都为 True 时才返回 True, 否则返回 False。A 和 B 并不是完全相等, 因此返回 False
A = array([
[0, 1, 2],
[1, 2, 3],
[2, 3, 4]
])
B = array([
[4, 3, 2],
[3, 2, 1],
[2, 1, 0]
])
if (A == B).all():
print('use all()')
if (A == B).any():
print('use any()')