np.where运行报错:含多个元素的数组真值不明确,求解决方法
问题排查与解决方案
错误原因
- 核心问题是
np.where调用时的语法错误:你为三个入参多套了一层外层括号,将判断条件、满足条件返回值、不满足条件返回值打包成了单个元组传入函数 np.where仅接收单个参数时,会尝试将输入转换为单个布尔值,而你传入的元组中包含多元素的numpy数组,无法直接转换为单个布尔值,因此触发对应报错
修正方法
直接去掉np.where参数外多余的括号即可,修正后代码如下:
red_array = red.ReadAsArray() swir1_array = swir1.ReadAsArray() # 对两个波段做差值运算 difference = (red_array - swir1_array).astype(np.int16) # 差值大于2000输出1,否则输出0 red_swir = np.where(difference > 2000, 1, 0)
如果追求更简洁的写法,也可以直接将布尔判断结果转换为整型,无需调用np.where,效果完全一致:
red_swir = (difference > 2000).astype(np.int16)
内容的提问来源于stack exchange,提问作者Karantai
相关产品推荐
相关产品推荐

