【问题标题】:Why does scipy.interpolate.interp1d() tell me my xnew value is out of range?为什么 scipy.interpolate.interp1d() 告诉我我的 xnew 值超出范围?
【发布时间】:2014-03-18 00:24:54
【问题描述】:

我正在尝试在 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)

这样算出 BminVblack 范围为 -.38 到 3.2,BminV 范围为 -.36 到 1.8。为什么它仍然说BminV的某些值超出了插值范围?

【问题讨论】:

  • 显示堆栈跟踪。
  • 你能检查BminVblack 是一个单调递增的数组吗?如果np.all(np.diff(BminVblack)>0) 评估为True,则它是单调递增的。如果它不是单调递增的,则会引发“超出范围”错误。
  • @flebool 我将 BminVblack 和温度更改为另一种方式([::-1]),现在它可以正常工作了。结果也很合理。非常感谢!

标签: python scipy interpolation


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多