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
2
layer = 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的条件也是不行的。

解决方法

  1. 使用运算符号代替逻辑运算,把“or”改为“+”或“|”,“and”改为“*”或“&” 在python中True是1,False是0,条件判断都是返回一个布尔值矩阵,在使用运算符号就可以实现矩阵的逻辑运算。

  2. 使用位运算np.bitwise_and()numpy库自带了一个计算位运算的函数,使用这个也可以实现矩阵逻辑运算