当前位置:  开发笔记 > 编程语言 > 正文

使用scipy.splprep时如何指定结点数

如何解决《使用scipy.splprep时如何指定结点数》经验,为你挑选了1个好方法。

我有以下代码.它生成以参数形式给出的给定3-D函数的3-D三次样条.我几乎使用splprep和splev的在线文档对我的情况进行了调整.

但我有一些我不明白的事情.这是代码:

%matplotlib inline
from numpy import arange, cos, linspace, pi, sin, random
from scipy.interpolate import splprep, splev
import matplotlib.pyplot as plt

# make ascending spiral in 3-space
t=linspace(0,1.75*2*pi,100)

x = sin(t)
y = cos(t)
z = t


# spline parameters
s=3.0 # smoothness parameter
k=3 # spline order
nest=-1 # estimate of number of knots needed (-1 = maximal)

# find the knot points
tck,u = splprep([x,y,z],s=s,k=k,nest=-1)

# evaluate spline, including interpolated points
xnew,ynew,znew = splev(linspace(0,1,400),tck)

关于这个实现,我有几个问题.

    (t,c,k)在这种情况下,元组究竟返回了什么?我阅读了文档,它说它返回结点,系数和样条的程度.结点是否必须是形式(x,y,z)的坐标?所以我们必须有"number of knots"这样的坐标点.但那并不是什么回归.我们只是返回一个数组length 11.

    什么u回报?(文档说它返回参数的值.这是什么意思?参数的值t

    当我使用nest = -1(这是默认值)时,它使用所需的最大结点数(在这种情况下,它们使用11结点).但是如何指定我自己的结点数,比方说50或80等?

我完全误解了这里的文档.有人可以启发我可能会使用示例吗?



1> 小智..:

参数值,u

这个想法是你的点[x,y,z]是一些参数化曲线的值,原始参数在你的例子中是t.知道参数t的值有助于弄清楚如何在这些点之间进行插值.因此,您可以选择将参数值作为可选参数传递u(u=t在此示例中).但是如果您选择不这样做,该方法将根据给定点之间的距离(参数间隔从0到1)猜测参数的值.然后将此猜测作为变量返回给您u,以便您了解数据的解释方式.如果你确实传递了u = t作为参数,那么u你的回归就完全一样了.

你真的不需要这个u来使用样条曲线.但是,如果需要将原始[x,y,z]点的位置与样条曲线的值进行比较,那么您可能希望将其u作为参数传递给splev.解释其含义的一种较简单的方法u是:它splev需要重现[x,y,z]您开始使用的坐标,并且由于平滑而存在一些偏差.

tck值

样条曲线t的节点是参数区间中的点,而不是3D空间中的点.由于在您的示例中,参数区间为[0,1],默认情况下选择,因此t的值在此范围内.甲是所述参数间隔的地方花键变化的某些系数.端点0和1在技术上是多个节点,因此它们被列出多次.

曲线的3D特性由系数表示c.您可能会注意到它是一个包含三个数组的列表,每个数组对应一个坐标.

结点数

使用此插值例程,您有两种选择:

准确地告诉它结点是什么(通过给出task=-1并提供t与结的论证).为避免混淆:这t不一定是t你得到点[x,y,z]的.人们并不一定希望每个样本点都是一个结点.

让结的确定达到常规,包括它们的数量.

但是,结的数量取决于平滑度参数的值s,因此可以间接地影响.例如,你的数据有11节,s = 3,但是12节,s = 1和14节,s = 0.1.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有