Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IDL与Python中样条插值的差异_Python_Interpolation_Spline_Idl Programming Language - Fatal编程技术网

IDL与Python中样条插值的差异

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.

我编写了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.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的文档。三次样条线通过(穿过)所有给定点。