NumPy二维数组双约束条件索引查找报错问题求解
报错原因
Python原生的and关键字仅支持对单个布尔值做逻辑判断,无法对NumPy生成的布尔数组执行逐元素逻辑与操作。
代码中(bz_2D_surface3 > 0.0)和(jz_2D_surface3 > 0.0)返回的是两个与原二维数组尺寸一致的布尔数组,直接传入and时,解释器无法判定整个数组的布尔真值,就会抛出对应错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
修复方案
将原生逻辑运算符and替换为NumPy支持的逐元素位与运算符&即可,注意两个比较条件必须分别用括号包裹——位运算符优先级高于比较运算符,不加括号会触发运算顺序错误。
修正后的可运行代码:
ind_direct_pos = np.where((bz_2D_surface3 > 0.0) & (jz_2D_surface3 > 0.0))
多条件判断注意事项
- 逐元素逻辑或判断不要用原生
or,替换为|运算符 - 逐元素逻辑非判断不要用原生
not,替换为~运算符 - 所有独立的比较表达式都需要单独用括号包裹,避免运算符优先级导致的结果异常
内容的提问来源于stack exchange,提问作者phryas
相关产品推荐
相关产品推荐

