Python 为什么scipy.interpolate.interp1d()告诉我我的新值超出范围?

Python 为什么scipy.interpolate.interp1d()告诉我我的新值超出范围?,python,scipy,interpolation,Python,Scipy,Interpolation,我试图用Python插入数据,但它不起作用 具体问题如下:我有一个恒星样本(大约70颗)的BminV颜色数据。我也通过插值为理论黑体发射器生成了这些值 #BminV is the data from the stars. temperatures = np.arange(1000.0, 80000.0, 50.0) #I generate for each of these temperatures a BminV colour. these are stored in BminVblack.

我试图用Python插入数据,但它不起作用

具体问题如下:我有一个恒星样本(大约70颗)的BminV颜色数据。我也通过插值为理论黑体发射器生成了这些值

#BminV is the data from the stars.
temperatures = np.arange(1000.0, 80000.0, 50.0)
#I generate for each of these temperatures a BminV colour. these are stored in BminVblack.
f = interpolate.interp1d(BminVblack, temperatures, kind='cubic')
print f(BminV)
对于BminV的每一个值,都会返回一个错误,表示它超出插值范围。我想我应该检查一下这些范围

print np.min(BminVblack), np.max(BminVblack)
print np.min(BminV), np.max(BminV)

计算得出BminV黑色范围为-38到3.2,BminV范围为-36到1.8。为什么它仍然说BminV的某些值超出了插值范围?

检查
BminVblack
是否为单调递增数组

如果
np.all(np.diff(BminVblack)>0)
计算为
True
,则它是单调递增的


如果不是单调递增,则可能会出现“超出范围”错误。如果输入数组是单调递减的,也会发生同样的情况,就像您的情况一样。

显示堆栈跟踪。您能否检查
BminVblack
是否为单调递增数组?如果
np.all(np.diff(BminVblack)>0)
计算为
True
,则它是单调递增的。如果它不是单调递增的,则可能会出现“超出范围”错误。@flebool I将BMINV和温度更改为相反的方式([::-1]),现在它工作正常。结果也相当合理。非常感谢你!