Python统计numpy数组指定范围元素数量报错问题
解决Numpy数组区间元素统计的ValueError问题
错误原因
你用的1e-11<A<1e-07是Python原生链式比较语法,但numpy数组不支持这种写法。该表达式会被拆解为(1e-11 < A) and (A < 1e-07),而numpy布尔数组执行and操作时会触发歧义——Python无法确定你要判断数组中是否存在至少一个符合条件的元素(any()),还是所有元素都符合(all()),因此抛出ValueError。
正确实现方式
以下两种方法都能正确统计区间内的元素数量:
方法1:使用np.logical_and
import numpy as np A = np.array([4.21922009e+002, 4.02356746e+002, 3.96553289e-09, 3.91811967e-010, 3.88467908e-08, 3.86636300e-010]) # 生成符合区间条件的布尔掩码 mask = np.logical_and(A >= 1e-11, A <= 1e-7) # 对布尔数组求和,True等价于1,False等价于0 count = np.sum(mask) print(count) # 输出4
方法2:使用&运算符(需加括号)
由于&的优先级高于比较运算符,必须给每个比较表达式单独加括号:
import numpy as np A = np.array([4.21922009e+002, 4.02356746e+002, 3.96553289e-09, 3.91811967e-010, 3.88467908e-08, 3.86636300e-010]) # 生成布尔掩码,注意括号不能省略 mask = (A >= 1e-11) & (A <= 1e-7) count = np.sum(mask) print(count) # 输出4
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

