我有一些数据,y
vsx
,我想用三次样条函数以更高的分辨率进行插值。在
这是我的数据集:
import numpy as np
print np.version.version
import scipy
print scipy.version.version
^{pr2}$1.9.2
0.15.1
我尝试使用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)])
但是,正如您在该图中看到的,我的样条曲线返回NaN
值:(
有原因吗?我很确定我的x值都在增加,所以我很难说为什么会这样。我有许多其他的数据集,我正在使用这个方法拟合,它只在这一组特定的数据上失败。在
非常感谢任何帮助。 谢谢你的阅读。在
解决方案是我有重复的x
值,但有不同的y
值!在
对于这种插值,您应该将
scipy.interpolate.interp1d
与参数kind='cubic'
一起使用(参见a related SO question)我还没有找到一个可以在实践中使用
InterpolatedUnivariateSpline
的用例(或者我只是不明白它的用途)。我得到了你的代码,所以插值是可行的,但是显示出极强的振荡,使其无法使用,这是我过去用这种插值方法得到的结果。使用低阶样条函数(例如
k=1
)可以更好地工作,但是这样就失去了三次插值的优势。在我还遇到了},而不是原来的}。在
InterpolatedUnivariateSpline
返回NaN值的问题。但在我的例子中,原因不是在x
数组中有重复项,而是因为x
中的值在docs声明值“必须增加时,x
中的值是递减的。因此,在这种情况下,必须提供相反的
x
和{x[::-1]
和{相关问题 更多 >
编程相关推荐