python – 这是scipy.interpolate.interp1d中的错误吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 这是scipy.interpolate.interp1d中的错误吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1356字,纯文字阅读大概需要2分钟。
内容图文
![python – 这是scipy.interpolate.interp1d中的错误吗?](/upload/InfoBanner/zyjiaocheng/787/c15ca8aee7b14fa0b5b7460ef084ca9e.jpg)
使用零阶插值时,我发现输入数组中的最后一个Y值不会返回X数组中的最后一个值:
from scipy.interpolate import interp1d
xx = [0.0, 1.0, 2.0]
xi = interp1d(xx, xx, kind='zero')
print(xi(xx))
似乎它应该返回[0.,1.,2.],但它返回[0.,1.,1.]. xx中的最后一个值被认为是在插值范围内,但不会作为最后一个点的值返回.文档没有提供“零”的详细信息,但我希望它会:
a)引发ValueError,因为输入值被认为是在半闭合范围[0,1.]和[1.,2.]上定义值,从而使2.0未定义,或者
b)返回2.0因为范围是[0,1.),[1.,2.]和[2.,2.)
interp1d函数似乎认为正确的答案是:
c)返回1.0,因为最后一个范围是特殊情况,定义为闭区间[1.,2.]
有正确的选择吗?如果是这样,它是由interp1d实现的吗?
解决方法:
零阶样条是分段常数,并且在结处具有不连续性,这里是插值点,因此xi(1.0-1e-13)== 0和xi(1.0 1e-13)== 1.
interp1d中的插值间隔定义为closed,[0,2].原则上可以预期存在单个浮点值x = 2.0,其给出结果2.0
但是,如上面的注释中所述,这里的样条实现来自FITPACK,它将k = 0样条定义为从右边开始的连续,除了最后一个不同的间隔.我不知道原因— Fortran代码可以追溯到80年代.我的猜测是它的工作方式没有特定的原因,可能除了使用B样条表示编写这样的代码稍微方便一点之外.
在我看来,这种行为是bug/quirk,但由于x值中存在任何舍入误差使其影响为零,因此优先解决问题. (需要考虑的一个方面是,由于没有规定它的作用,它是由实现定义的;打破后向compat可能比问题本身更糟糕.)
编辑:如另一个答案中所述,样条实际上是由splmake构造的;这个例程不是来自FITPACK.不能说没有看最终的间隔行为是由于拟合还是构造.
内容总结
以上是互联网集市为您收集整理的python – 这是scipy.interpolate.interp1d中的错误吗?全部内容,希望文章能够帮你解决python – 这是scipy.interpolate.interp1d中的错误吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。