IDL与Python中样条插值的差异
我编写了IDL代码:IDL与Python中样条插值的差异,python,interpolation,spline,idl-programming-language,Python,Interpolation,Spline,Idl Programming Language,我编写了IDL代码: zz= [ 0, 5, 10, 15, 30, 50, 90, 100, 500] uz= [ 20, 20, 20, 30, 60, 90, 30, -200, -200]*(-1.) zp= findgen(120)*500+500 up= spline((zz-10.),uz,(zp/1000.0)) print, up IDL给了我up数组的值,从大约-20到500 .和我在Python中做的一样 import numpy as npy zz = npy.
zz= [ 0, 5, 10, 15, 30, 50, 90, 100, 500]
uz= [ 20, 20, 20, 30, 60, 90, 30, -200, -200]*(-1.)
zp= findgen(120)*500+500
up= spline((zz-10.),uz,(zp/1000.0))
print, up
IDL给了我up数组的值,从大约-20到500
.和我在Python中做的一样
import numpy as npy
zz = npy.array([ 0, 5, 10, 15, 30, 50, 90, 100, 500])
uz = npy.array([ 20, 20, 20, 30, 60, 90, 30, -200, -200])*(-1.)
zp = npy.arange(0,120)*500+500
from scipy.interpolate import interp1d
cubic_interp_u = interp1d(zz-10., uz, kind='cubic')
up = cubic_interp_u(zp/1000)
print up
它让我放弃了从-20到-160的数值。有什么想法吗?提前谢谢 事实上,我看没什么问题。我在这里使用的是
UnivariateSpline
,而不是interp1d
和cubic\u interp\u
,但基本例程基本相同,据我所知:
import numpy as npy
import pyplot as pl
from scipy.interpolate import UnivariateSpline
zz = npy.array([ 0, 5, 10, 15, 30, 50, 90, 100, 500])
uz = npy.array([ 20, 20, 20, 30, 60, 90, 30, -200, -200])*(-1.)
zp = npy.arange(0,120)*500+500
pl.plot(zz, uz, 'ro')
pl.plot(zp/100, UnivariateSpline(zz, uz, s=1, k=3)(zp/100), 'k-.')
pl.plot(zp/1000, UnivariateSpline(zz, uz, s=1, k=3)(zp/1000), 'b-')
我看到的唯一问题是,您使用zp/1000
限制了插值。使用zp/100
,我得到了-160,-20
范围之外的所有值,与蓝线(zp/1000
)相比,您也可以从点虚线的图形中看到这些值:
看起来scipy做得很好
顺便说一下,如果你想(样条)适合这些离群值,你可能想考虑在日志日志空间中工作,或者粗略地归一化你的数据(日志日志空间类型)。如果值的数量级相同,大多数拟合问题效果最好。对于初学者,可以绘制数据点上的插值结果,然后查看其中一个是否有意义,或者一个是否完全没有意义。另外,您可能需要再次检查IDL和scipy/numpy在其例程中是否对整数数组进行相同的处理(即,它们是否都自动将输入转换为浮点?@Evert:是的,谢谢。这是一个绘制结果的好主意。我已经完成了,图片显示在这里。请看一看。我猜Python的插值函数无法捕捉我的配置文件。不过,我还是不知道要修改它!请帮忙!图片显示在哪里?你说的个人资料是什么意思?对不起,我不能发布这些图片,因为我没有足够的资料reputation@JanneKarila我指的是我的曲线图,在python中,函数样条曲线不遵循我的曲线图,它不会通过曲线图中的所有点。它想从某个起点绘制一条三阶曲线,非常感谢!现在我想我需要的不是一个三次样条函数,而是一条平滑拟合的曲线。我希望拟合曲线通过所有给定点。你有这方面的经验吗?再次非常感谢@hoangtran:我在这里几乎没有经验,但样条曲线本质上是一条平滑曲线;它只是有一个不太方便的数学公式。另外,请查看单变量样条线的文档,特别是关于参数
s
@hoangtran的文档。三次样条线通过(穿过)所有给定点。