我在 x 轴上有 3 个数据点,在 y 轴上有 3 个数据点:
x = [1,3,5]
y=[0,5,0]
Run Code Online (Sandbox Code Playgroud)
我想要一条从 (1,0) 开始的曲线,到达 (3,5) 的最高点,然后在 (5,0) 结束
我想我需要使用插值,但不确定如何使用。如果我像这样使用来自 scipy 的样条:
import bokeh.plotting as bk
from scipy.interpolate import spline
p = bk.figure()
xvals=np.linspace(1, 5, 10)
y_smooth = spline(x,y,xvals)
p.line(xvals, y_smooth)
bk.show(p)
Run Code Online (Sandbox Code Playgroud)
问题是由于spline没有额外的参数是 3 阶。这意味着您没有足够的点/方程来获得样条曲线(这表现为对病态矩阵的警告)。您需要应用较低阶的样条,例如 2 阶的三次样条:
import bokeh.plotting as bk
from scipy.interpolate import spline
p = bk.figure()
xvals=np.linspace(1, 5, 10)
y_smooth = spline(x,y,xvals, order=2) # This fixes your immediate problem
p.line(xvals, y_smooth)
bk.show(p)
Run Code Online (Sandbox Code Playgroud)
此外,spline在 SciPy 中已弃用,因此即使可能,您也最好不要使用它。更好的解决方案是使用CubicSpline该类:
import bokeh.plotting as bk
from scipy.interpolate import CubicSpline
p = bk.figure()
xvals=np.linspace(1, 5, 10)
spl = CubicSpline(x, y) # First generate spline function
y_smooth = spl(xvals) # then evalute for your interpolated points
p.line(xvals, y_smooth)
bk.show(p)
Run Code Online (Sandbox Code Playgroud)
只是为了显示差异(使用 pyplot):
如可以看到的那样,CubicSpline是相同的spline的order=2
| 归档时间: |
|
| 查看次数: |
6213 次 |
| 最近记录: |