numpy库使用多个元素的数组的真值不明确问题
摘要
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
问题
总所周知,numpy库可以使用布尔值索引,这对加快python的矩阵处理速度起到了很大的作用。比如在图像处理中使用矩阵掩膜的方法out_img[input == i] = xxx
可以快速对满足条件的值赋值(比如应用在直方图均衡)。
同时使用np.where(condition, x, y)
的方法可以更快得同时处理满足条件和不满足条件的情况,满足修改为x,不满足修改为y。
但使用二维矩阵的俩个条件时就会报错,如要让大于等于era1和小于era2的值赋255,不满足服0
1
2layer = np.where((layer>=era1) and (layer<era2),255,0)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
当然用a<x<b
的条件也是不行的。
解决方法
使用运算符号代替逻辑运算,把“or”改为“+”或“|”,“and”改为“*”或“&” 在python中True是1,False是0,条件判断都是返回一个布尔值矩阵,在使用运算符号就可以实现矩阵的逻辑运算。
使用位运算
np.bitwise_and()
numpy库自带了一个计算位运算的函数,使用这个也可以实现矩阵逻辑运算