ok, I found a solution which is a small modification of āpvā above (note that splev only works for 1D vectors) One of the problems that I encountered initially: "tck, u = scipy.interpolate.splprep (data) ", is that it requires a minimum of 4 points to work (Matlab works with two points). I used two points. After enlarging the data points, it works the way I want.
Here is the solution for completeness:
import numpy as np import matplotlib.pyplot as plt from scipy import interpolate data = np.array([[-1452.18133319 , 3285.44737438, -7075.49516676], [-1452.20175668 , 3285.29632734, -7075.49110863], [-1452.32645025 , 3284.37412457, -7075.46633213], [-1452.38226151 , 3283.96135828, -7075.45524248]]) distance=np.array([0., 0.15247556, 1.0834, 1.50007]) data = data.T tck,u = interpolate.splprep(data, u=distance, s=0) yderv = interpolate.splev(u,tck,der=1)
and tangents (which match Matlab results if the same data is used):
(-0.13394599723751408, -0.99063114953803189, 0.026614957159932656) (-0.13394598523149195, -0.99063115868512985, 0.026614950816003666) (-0.13394595055068903, -0.99063117647357712, 0.026614941718878599) (-0.13394595652952143, -0.9906311632471152, 0.026614954146007865)