ndarray类型数据判定是否相等
报错提示:The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
解决办法:使用 .any() or .all()
这两个有什么不同呢,又是在什么情况下使用呢,我们通过实验对比分析下:
# 采用控制变量的方法假设有 A B C D 四个数组,其中
A与B完全相等
A与C部分相等
A与D完全不等
A = np.array([1,2,3])
B = np.array([1,2,3])
C = np.array([2,2,4])
D = np.array([5,6,7])
1、先用 == 来测试返回的结果
print(A == B)
>>> [ True True True]
print(A == C)
>>> [False True False]
print(A == D)
>>> [False False False]
可以看出直接用等于号返回的是一个布尔值组,返回的是等号右边数组中每个元素与左边数组对应位置元素是否相等,相等返回true,不等返回false,所以在一些场景直接使用==系统判断没法得出到底是True还是False的结论,所以会出现开头的报错。那么使用.all()还是.any()也要根据你的情况来使用。
2、.all()返回的结果
print((A == B).all())
>>> True
print((A == C).all())
>>> False
print((A == D).all())
>>> False
可以看出,完全相等返回True,部分相等与完全不等均返回False
3、.any()返回的结果
print((A == B).any())
>>> True
print((A == C).any())
>>> True
print((A == D).any())
>>> False
可以看出,完全相等与部分相等返回True,完全不等返回False
Results
在进行逻辑判断时,如果要两个数组完全相等的情况下返回True,则使用.all()函数;
如果只要两个数组有共同部分返回True,则使用.any()函数。