2017-08-02 84 views
-2

有没有什么办法使用scipy evllute BSpline/Nurbs在给定的点?我搜索只需要给定点,结矢量和样条线顺序的方法。Python BSpline/Nurbs评估在给定点使用scipy

我找到了评估样条函数的方法,但我只想评估给定点的基本元素。那么有人可能知道在这种情况下使用什么?它甚至有可能吗?

另一方面,我已经实现了Cox de Boor算法,但由于他的递归定义,评估速度很慢。

回答

0

在SciPy的0.19.0及以上的,可以使用BSpline

In [1]: from scipy.interpolate import BSpline 

In [2]: spl = BSpline.basis_element([0, 1, 2, 3]) 

In [3]: spl(1.5) 
Out[3]: array(0.75) 

In [4]: spl([1.5, 2, 3.6]) 
Out[4]: array([ 0.75, 0.5 , 0.18]) 

文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.BSpline.html

对于三次样条具体情况,你可以使用CubicSpline,这实际上工作在多项式基础。

NURBS不可用于scipy开箱即用。一种方法是对BSpline进行小类归类,并重新定义__call__方法来评估分子和分母(通过委托给BSpline.__call__)。 YMMV。

+0

这个功能在我看来没有意义。如果我有一个结矢量[0,0,0,0,0.2,0.4,0.6,0.8,1,1,1],我应该得到如6级的基础元素,如N = {N_ {1,3},N_ {2,3},...,N_ {6,3}}。现在我想在给定的Point x处评估所有这些Basis元素。但函数spl = BSpline.basis_element只是给了我一个值。 –

+0

BSpline.basis_element只构造一个基本元素。 –