2014-02-18 40 views
0

我想在Python中插入数据,但它只是不工作。为什么scipy.interpolate.interp1d()告诉我我的xnew值超出范围?

具体问题如下:我有BminV颜色数据的星星样本(其中约70人)。通过插值,我也为理论黑体辐射源生成了这些值。

#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) 

该工程以有BminVblack范围为-.38至3.2,并且BminV范围从-.36到1.8。为什么它仍然会说BminV的某些值超出插值范围?

+0

显示堆栈跟踪。 – user2357112

+0

你能检查一下'BminVblack'是一个单调递增的数组吗?如果np.all(np.diff(BminVblack)> 0)'评估为'True',则它是单调递增的。如果它不单调增加,则可能引发“超出范围”的错误。 – gg349

+0

@flebool我改变了BminVblack和温度去其他方式([:: - 1]),现在它工作正常。结果也相当合理。非常感谢你! – user2229219

回答

0

检查BminVblack是一个单调递增的数组。

如果np.all(np.diff(BminVblack)>0)评估为True,它是单调增加的。

如果不单调增加,则可能会引发“超出范围”的错误。如果输入数组单调减少,情况也是如此。

相关问题