有没有办法为 interp1d 配置变量 fill_values?

问题描述

我不知道我的问题是否很清楚,我很抱歉。 这是我将用来说明我需要做什么的示例:

from scipy.interpolate import interp1d
intertest = interp1d([500,1000],[-1,1])
mylist = [400,500,1000,1100]
list2 =intertest(mylist)
print(list2)

显然,我得到了一个 ValueError,因为有值(400 和 1100)超出了插值范围。但我想知道是否有可能设置一个配置,使范围外的值变为范围内最接近的值(400 将变为 500,1100 将变为 1000),在这种情况下,结果将为 [-1,-1,1,1]。

在实际情况下,数据非常大,如果解决方案是插值配置会更好,因为它可以直接应用于数据数组。

预先感谢您的帮助。

解决方法

您应该在 interp1d 之前修改列表:[min(x_max,max(x_min,s)) for s in mylist_tmp]

from scipy.interpolate import interp1d
x_min=500
x_max=1000
intertest = interp1d([x_min,x_max],[-1,1])
mylist_tmp = [400,500,1000,1100]
mylist=[min(x_max,s)) for s in mylist_tmp]
list2 =intertest(mylist)
print(list2)