numpy对两个数组施加双条件时出现ValueError该如何解决?
错误原因
- 不能使用Python原生的
and运算符做NumPy数组的逐元素逻辑判断:and会尝试把整个数组转换为单个布尔值,这就是报错中「多元素数组的真值是模糊的」的原因,逐元素逻辑与需要使用NumPy的&运算符。 - 不需要加
np.all:np.all会对所有位置的判断结果做聚合,返回一个全局布尔值,你需要的是逐位置判断两个条件是否同时满足,不需要聚合操作。 - 额外注意:
&的运算符优先级高于==,所以两个判断条件必须单独用括号包裹,否则会出现计算顺序错误。
正确实现代码
两种写法都可以实现需求,效果完全一致:
写法1:继续使用np.where
import numpy as np # 初始c数组的生成逻辑保持不变 c = np.where(a == b, 0, 99) # 逐元素判断条件更新c的值 c = np.where((a == 2) & (b == 1), -1, c)
写法2:用布尔索引直接赋值(写法更直观)
c = np.where(a == b, 0, 99) c[(a == 2) & (b == 1)] = -1
内容的提问来源于stack exchange,提问作者user4884141
相关产品推荐
相关产品推荐

