我正在将一份用R语言编写的脚本移植到Python。在R中,我使用了smooth.spline方法,在Python中,我使用的是SciPy UnivariateSpline方法。尽管它们都基于三次样条方法,但它们产生的结果并不相同。是否有一种方法或替代UnivariateSpline的方法,可以使Python的样条返回与R相同的结果?
我是一名数学家。我理解样条的一般思想,但不了解Python或R中其实现的细节。
以下是用R和Python编写的代码。输入数据对两者都是相同的。
这是输入数据:
x = 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
y = -1, 1, 1, -1, 1, 0, .5, .5, .4, .5, -1
以下是R语言代码:
x = seq(0,1, by = .1);
y = c(-1,1,1, -1,1,0, .5,.5,.4, .5, -1);
spline_xy = smooth.spline(x,y)
predict(spline_xy,x)
输出结果为:
$x
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
$y
[1] 0.120614583 0.170800975 0.210954680 0.238032338 0.253672155
[6] 0.253684815 0.236432643 0.200264536 0.145403302 0.074993797
[11] -0.004853825
以下是Python代码
import numpy as np
from scipy.interpolate import UnivariateSpline
x = np.linspace(0, 1, num = 11, endpoint=True)
y = np.array([-1,1,1, -1,1,0, .5,.5,.4, .5, -1])
spline_xy = UnivariateSpline(x,y)
print('x =', x)
print('ysplined =',spline_xy(x))
输出结果为:
x = [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
ysplined =
[-0.26433566 -0.02587413 0.18857809 0.36585082 0.49277389
0.55617716 0.54289044 0.43974359 0.23356643 -0.08881119
-0.54055944]
我希望R中的输出结果$y和Python中的ysplined结果是一致的,但它们并不相同。希望能得到一些帮助,例如如何设置参数或者解释说明。在此提前感谢您的帮助!