【发布时间】:2018-01-07 20:22:26
【问题描述】:
我在 scipy interp1d 函数中收到此错误。通常,如果 x 不是单调递增的,就会产生这个错误。
import scipy.interpolate as spi
def refine(coarsex,coarsey,step):
finex = np.arange(min(coarsex),max(coarsex)+step,step)
intfunc = spi.interp1d(coarsex, coarsey,axis=0)
finey = intfunc(finex)
return finex, finey
for num, tfile in enumerate(files):
tfile = tfile.dropna(how='any')
x = np.array(tfile['col1'])
y = np.array(tfile['col2'])
finex, finey = refine(x,y,0.01)
代码是正确的,因为它成功地处理了 6 个数据文件并在第 7 个时抛出了错误。所以数据肯定有问题。但据我所知,数据一直在增加。 很抱歉没有提供示例,因为我无法在示例中重现错误。
有两件事可以帮助我:
- 一些头脑风暴 - 如果数据确实是单调的 增加,还有什么会产生这个错误?另一个提示, 关于小数,可能在this question,但我认为 我的解决方案(x 的最小值和最大值)足够强大,可以避免它。要么 不是吗?
- 是否有可能(如何?)返回 x_new 的值和
它是投掷
ValueError: A value in x_new is above the interpolation range.时的索引,这样我实际上可以看到 文件有问题吗?
更新
所以问题在于,出于某种原因,max(finex) 大于 max(coarsex)(一个是 .x39,另一个是 .x4)。我希望将原始值四舍五入到 2 位有效数字可以解决问题,但它没有,它显示的数字更少,但仍然计入未显示的数字。我该怎么办?
【问题讨论】:
-
与
coarsex的范围相比,我会关注finex的最小值/最大值。该消息告诉我,在需要外推的区域中,finex的某个值大于coarsex的任何值。 -
finex的值怎么会大于coarsex的值,如果说它应该只在coarsex的最大值范围内呢?哦,我明白了,我想如果step大于最大值和第二个最大值之间的差值,可能会发生这种情况......不,等等,它不能,因为步长是step!
标签: python scipy interpolation