为什么InterpolatedUnivariateSpline返回nan值

2024-04-18 13:37:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些数据,yvsx,我想用三次样条函数以更高的分辨率进行插值。在

这是我的数据集:

import numpy as np
print np.version.version
import scipy
print scipy.version.version   

1.9.2
0.15.1

^{pr2}$

我尝试使用scipy InterpolatedUnivariateSpline方法进行拟合,用三阶样条函数k=3插值,并外推为0ext='zeros'

import scipy.interpolate as interp
yspline = interp.InterpolatedUnivariateSpline(x,y, k=3, ext='zeros')
yvals = yspline(xx)

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, y, 'ko', label='Values')
ax.plot(xx, yvals, 'b-.', lw=2, label='Spline')
plt.xlim([min(x), max(x)])

Y vs X

但是,正如您在该图中看到的,我的样条曲线返回NaN值:( 有原因吗?我很确定我的x值都在增加,所以我很难说为什么会这样。我有许多其他的数据集,我正在使用这个方法拟合,它只在这一组特定的数据上失败。在

非常感谢任何帮助。 谢谢你的阅读。在

编辑!在

解决方案是我有重复的x值,但有不同的y值!在


Tags: 数据方法函数importversionasnpzeros
2条回答

对于这种插值,您应该将scipy.interpolate.interp1d与参数kind='cubic'一起使用(参见a related SO question

我还没有找到一个可以在实践中使用InterpolatedUnivariateSpline的用例(或者我只是不明白它的用途)。我得到了你的代码,spline interpolation

所以插值是可行的,但是显示出极强的振荡,使其无法使用,这是我过去用这种插值方法得到的结果。使用低阶样条函数(例如k=1)可以更好地工作,但是这样就失去了三次插值的优势。在

我还遇到了InterpolatedUnivariateSpline返回NaN值的问题。但在我的例子中,原因不是在x数组中有重复项,而是因为x中的值在docs声明值“必须增加时,x中的值是递减的
因此,在这种情况下,必须提供相反的x和{},而不是原来的x[::-1]和{}。在

相关问题 更多 >