我想评估样条线,该样条线由x
和y
在第三点pointToEvaluate
(此处为0)处定义,但不评估该点我通过了。
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = (-1, 0, 1, 2, 3)
y = (1, 0, 1, 4, 9)
tck, u = interpolate.splprep([x,y], s=0)
pointToEvaluate = 0
xPoints, yPoints = interpolate.splev(pointToEvaluate, tck)
fig, ax = plt.subplots()
ax.plot(x, y, 'r-')
ax.plot(xPoints, yPoints, 'bo')
plt.show()
print(xPoints, yPoints)
它应将(xPoints,yPoints)的值打印为(0.0,0.0),但返回:(-1.0000000000000002 1.0)。在图像中:
我显然错误地使用了interpolate.splev(),但我不知道在哪里。
答案 0 :(得分:0)
我设法使其与splrep(splprep的一维版本)一起使用。
对于splprep,splev说
x:array_like
要返回平滑样条或其衍生值的点的数组。如果从splprep返回tck,则应给出参数值u。
那么,我猜想有人需要向splprep提供u
关键字
u:类似array_,可选
参数值的数组。如果未给出,则这些值将自动计算为M = len(x [0]),其中
v [0] = 0
v [i] = v [i-1] +距离(x [i],x [i-1])
u [i] = v [i] / v [M-1]
但是,我无法设法以这种方式工作...
此外,还有更新的make_interp_spline(外观here)。后者和splrep的示例均提供:
import matplotlib.pyplot as plt
from scipy import interpolate
x = (-1, 0, 1, 2, 3)
y = (1, 0, 1, 4, 9)
tck = interpolate.splrep(x, y, s=0)
b = interpolate.make_interp_spline(x, y)
pointsToEvaluate = (0,)
yPoints1 = interpolate.splev(pointsToEvaluate, tck)
yPoints2 = b(pointsToEvaluate)
fig, ax = plt.subplots()
ax.plot(x, y, 'r-')
ax.plot(pointsToEvaluate, yPoints1, 'bo', markersize=15)
ax.plot(pointsToEvaluate, yPoints2, 'ws')
plt.show()
并显示