In this question zu extrahieren, fragte ich die Gemeinschaft darüber, wie scipy.interpolate.splev
berechnet eine Spline-Basis .. Mein Ziel war es, eine Spline schneller als splev
durch Vorausberechnen ein bspline basis
und erzeugt eine Kurve zu berechnen indem Sie ein basis
zu control point
Punktprodukt tun.Wie die B-Spline-Basis von scipy.interpolate.BSpline
Seither wurde a new scipy.interpolate.BSpline
interpolator zu scipy
hinzugefügt. It comes with a basis_element
function, von dem ich annehme, könnte verwendet werden, um die Grundlage zurückzugeben, die verwendet wird, um einen Spline zu berechnen.
So zum Beispiel unter Verwendung des Codes from here mit den Eingängen unten:
import numpy as np
# Control points
cv = np.array([[ 50., 25., 0.],
[ 59., 12., 0.],
[ 50., 10., 0.],
[ 57., 2., 0.],
[ 40., 4., 0.],
[ 40., 14., 0.]])
kv = [0, 0, 0, 0, 1, 2, 3, 3, 3, 3] # knot vector
n = 10 # 10 samples (keeping it simple)
degree = 3 # Curve degree
I kann folgende BSPLINE Basis berechnen:
[[ 1. 0. 0. 0. 0. 0. ]
[ 0.2962963 0.56481481 0.13271605 0.00617284 0. 0. ]
[ 0.03703704 0.51851852 0.39506173 0.04938272 0. 0. ]
[ 0. 0.25 0.58333333 0.16666667 0. 0. ]
[ 0. 0.07407407 0.54938272 0.36728395 0.00925926 0. ]
[ 0. 0.00925926 0.36728395 0.54938272 0.07407407 0. ]
[ 0. 0. 0.16666667 0.58333333 0.25 0. ]
[ 0. 0. 0.04938272 0.39506173 0.51851852 0.03703704]
[ 0. 0. 0.00617284 0.13271605 0.56481481 0.2962963 ]
[ 0. 0. 0. 0. 0. 1. ]]
Verwendung np.dot
mit basis
und control points
Returns 10 Proben auf der Kurve:
[[ 50. 25. 0. ]
[ 55.12654321 15.52469136 0. ]
[ 55..19753086 0. ]
[ 53.41666667 9.16666667 0. ]
[ 53.14506173 7.15432099 0. ]
[ 53.1882716 5.179. ]
[ 51.58333333 3.83333333 0. ]
[ 47.20987654 3.87654321 0. ]
[ 42.3179.7345679 0. ]
[ 40. 14. 0. ]]
Frage: Ist es möglich, die Basis wie oben beschrieben aus scipy.interpolate.BSpline
zu extrahieren?
Offensichtlich muß ich es falsch verwenden, weil, wenn ich versuche ich so etwas wie diese:
from scipy.interpolate import BSpline
b = BSpline.basis_element(kv)
print b(np.linspace(kv[0],kv[-1],n)) # i'm not sure what these values represent
[ 0. 0.00256299 0.04495618 0.16555213 0.28691315 0.28691315
0.16555213 0.04495618 0.00256299 0. ]
Danke für die Klärung. Ich wurde von der Terminologie verwirrt. – Fnord