是否可以为scipy.interpolate.interp1d配置超范围取最近边界的填充规则?
你可以通过配置interp1d的内置参数直接实现需求,无需额外对数据做预处理,性能符合大数据量场景要求。
解决方案代码
from scipy.interpolate import interp1d # 关闭边界异常报错,超出区间范围时分别取左右边界对应的y值 intertest = interp1d([500, 1000], [-1, 1], bounds_error=False, fill_value=(-1, 1)) mylist = [400, 500, 1000, 1100] list2 = intertest(mylist) print(list2)
运行后输出结果为:[-1. -1. 1. 1.],和预期结果完全一致。
通用写法优化
如果不想硬编码边界值,可以直接从插值的y数组中取值,适配任意插值区间:
x = [500, 1000] y = [-1, 1] intertest = interp1d(x, y, bounds_error=False, fill_value=(y[0], y[-1]))
高版本scipy简化写法
如果你的scipy版本≥1.10.0,可以直接使用fill_value="clip"参数,自动裁剪超出边界的值到最近的区间端点:
intertest = interp1d([500, 1000], [-1, 1], bounds_error=False, fill_value="clip")
内容的提问来源于stack exchange,提问作者NicoliHc
相关产品推荐
相关产品推荐

