python中数组上的三元运算符

2024-04-24 16:43:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中的数组上执行以下操作:

if true then a else b

我试着在一个图像通道上表演。基本上我想检查一个值是否大于255,如果大于255,则返回255,否则返回正在检查的值。在

我正在尝试的是:

^{pr2}$

我得到以下错误: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

有没有更好的方法来做这个手术?在


Tags: 方法图像true元素if错误any数组
3条回答

在你的表达中:

if imfinal[:,:,1] <= 255

你试图比较一个标量和一个向量,所以它不太可能工作。在

您实际想要的是使用map()来检查数组的每个元素:

^{pr2}$

虽然其他答案很好地涵盖了一般情况,但在您的案例中,最好的解决方案可能是使用numpy.minimum来为您扩展标量:

imfinal[:,:,1] = numpy.minimum(imfinal[:,:,1], 255)

使用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()。在

本质上,当使用andor比较数组时,它会变得模棱两可,因为如果数组中的1个值匹配呢?若要比较数组,应分别使用&|~表示{}、ornot。在

np.where使用布尔条件为第二个参数赋值,否则指定第三个参数,请参见docs

相关问题 更多 >