Python过滤数组上下界元素后计算均值,报TypeError如何解决
问题分析与代码实现
现有代码核心错误
- 变量名拼写错误:多处将参数
measuredRate误写为measuredrate,第二个内部过滤函数的参数upperbound和传入的upperBound大小写不匹配,会触发未定义变量报错。 - 过滤逻辑写反:你定义的两个过滤函数是返回超出边界的数值,实际需求是保留
[lowerBound, upperBound]范围内的数值。 np.any用法错误:x.any()的入参为轴参数,不能直接传入待判断元素,且你额外将一维数组套一层生成二维数组x属于多余操作,是触发本次TypeError的直接原因。- 逻辑结构错误:一个数值不可能同时小于下界、大于上界,判断条件的
and应改为or;且完全不需要循环遍历数组,遍历过程中修改原数组长度还会导致索引越界。
修复后的可运行代码(保留原始编写逻辑)
import numpy as np def fermentationRate(measuredRate, lowerBound, upperBound): # 过滤出范围内的数值 def filter_value(measuredRate, lowerBound, upperBound): return [value for value in measuredRate if lowerBound <= value <= upperBound] filtered_data = filter_value(measuredRate, lowerBound, upperBound) averageRate = np.mean(filtered_data) return averageRate print(fermentationRate(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 15, 25))
运行输出结果为:19.6
更简便的NumPy向量化实现(推荐)
利用NumPy布尔索引可以一行完成过滤,代码更简洁运行效率更高:
import numpy as np def fermentationRate(measuredRate, lowerBound, upperBound): # 布尔索引直接过滤范围内的元素 filtered = measuredRate[(measuredRate >= lowerBound) & (measuredRate <= upperBound)] return np.mean(filtered) print(fermentationRate(np.array([20.1, 19.3, 1.1, 18.2, 19.7, 121.1, 20.3, 20.0]), 15, 25))
内容的提问来源于stack exchange,提问作者sedative
相关产品推荐
相关产品推荐

