2024-04-24 16:43:06 发布
网友
我试图在python中的数组上执行以下操作:
if true then a else b
我试着在一个图像通道上表演。基本上我想检查一个值是否大于255,如果大于255,则返回255,否则返回正在检查的值。在
我正在尝试的是:
我得到以下错误: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()
有没有更好的方法来做这个手术?在
在你的表达中:
if imfinal[:,:,1] <= 255
你试图比较一个标量和一个向量,所以它不太可能工作。在
您实际想要的是使用map()来检查数组的每个元素:
map()
虽然其他答案很好地涵盖了一般情况,但在您的案例中,最好的解决方案可能是使用numpy.minimum来为您扩展标量:
numpy.minimum
imfinal[:,:,1] = numpy.minimum(imfinal[:,:,1], 255)
使用np.where:
np.where
imfinal[:,:,1] = np.where(imfinal[:,:,1] <= 255, imfinal[:,:,1], 255)
至于为什么会出现这个错误,请看这个:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()。在
本质上,当使用and,or比较数组时,它会变得模棱两可,因为如果数组中的1个值匹配呢?若要比较数组,应分别使用&、|、~表示{}、or、not。在
and
or
&
|
~
not
np.where使用布尔条件为第二个参数赋值,否则指定第三个参数,请参见docs
在你的表达中:
你试图比较一个标量和一个向量,所以它不太可能工作。在
您实际想要的是使用
^{pr2}$map()
来检查数组的每个元素:虽然其他答案很好地涵盖了一般情况,但在您的案例中,最好的解决方案可能是使用
numpy.minimum
来为您扩展标量:使用
np.where
:至于为什么会出现这个错误,请看这个:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()。在
本质上,当使用}、
and
,or
比较数组时,它会变得模棱两可,因为如果数组中的1个值匹配呢?若要比较数组,应分别使用&
、|
、~
表示{or
、not
。在np.where
使用布尔条件为第二个参数赋值,否则指定第三个参数,请参见docs相关问题 更多 >
编程相关推荐