Python代码if判断数组相等报ValueError错误如何解决?
报错原因
你代码中的l和complist存储的都是NumPy数组类型数据,使用==对两个NumPy数组做等值判断时,不会返回单个布尔值,而是返回一个与数组维度相同的布尔数组,每个位置的布尔值对应两个数组同位置元素是否相等。Python的if判断语句只能接收单个布尔值来决定条件是否成立,面对多元素的布尔数组时无法判断整体的真值,因此触发该报错。
解决方案
方案1:修改条件判断适配数组比较逻辑
根据你的实际判断需求修改判断语句即可:
- 若你需要判断两个数组所有位置元素都完全相等(你的场景是匹配随机选出的原数组,通常是这个需求),给等值判断结果加上
.all()方法:
# 修改原if语句,后续两个if同理调整即可 if (l == complist[0]).all(): z=myList[0] if (l == complist[1]).all(): z=myList[1] if (l == complist[2]).all(): z=myList[2]
- 若你只需要判断两个数组至少有一个位置的元素相等,给等值判断结果加上
.any()方法:
if (l == complist[0]).any(): z=myList[0]
方案2:优化逻辑从根源避免数组比较
你是从complist中随机选取的元素,完全可以直接随机选取索引,无需后续遍历比较匹配,代码更简洁高效,也不会触发该报错:
a,b=0,700 # 直接随机取索引,同时获取对应l和z idx = random.randint(0, len(complist)-1) l = complist[idx] z = myList[idx] h, w, c = l.shape img[a:h+a, b:w+b] = l
内容的提问来源于stack exchange,提问作者yash jaiswal
相关产品推荐
相关产品推荐

