python - scipy BSpline 在 python 中的拟合

标签 python scipy smoothing curves bspline

这是我第一次使用 BSpline,我想为我的数据点拟合一条曲线。我试过使用单变量样条曲线并尝试使用 splev 和 splrep,但我真的很想学习如何使用 BSpline 来做到这一点。

看起来我的拟合真的很不稳定,线条甚至没有穿过点。

arraymagU = linspace(U_timeband.min(),U_timeband.max(),300) #array for my x data points
UfunctionBS = BSpline(U_timeband,U_magband,k=4,extrapolate=False)
arraymagU2 = UfunctionBS(arraymagU)

plt.plot(arraymagU,arraymagU2)

U_timeband 是我的 x 坐标,U_magband 只是我的 y。 k=4 我认为表示立方拟合?我试过这个值,但它似乎并没有使它变得更好。

它产生这个:

this

我怎样才能让它变得更好、更一致? 我想我可能必须定义断点,但我也不确定该怎么做。

最佳答案

splrep返回一个元组 (t,c,k),其中包含节点向量、B 样条系数和样条的阶数。这些可以被馈送到 interpolate.BSpline 以创建 BSpline 对象:

import numpy as np
import scipy.interpolate as interpolate
import matplotlib.pyplot as plt

x = np.array([ 0. ,  1.2,  1.9,  3.2,  4. ,  6.5])
y = np.array([ 0. ,  2.3,  3. ,  4.3,  2.9,  3.1])

t, c, k = interpolate.splrep(x, y, s=0, k=4)
print('''\
t: {}
c: {}
k: {}
'''.format(t, c, k))
N = 100
xmin, xmax = x.min(), x.max()
xx = np.linspace(xmin, xmax, N)
spline = interpolate.BSpline(t, c, k, extrapolate=False)

plt.plot(x, y, 'bo', label='Original points')
plt.plot(xx, spline(xx), 'r', label='BSpline')
plt.grid()
plt.legend(loc='best')
plt.show()

enter image description here

关于python - scipy BSpline 在 python 中的拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179024/

相关文章:

python - 使用 PyPlot 绘制平滑线,然后设置标记

Android关闭滚动动画

python - 如何可视化 Pandas Dataframe 中的时间数据?

python - 在 Python 中验证数据类型

python - 将 Dialogflow 连接到 Pepper - HTTPSConnection 问题

基于多种条件的Python随机样本选择

python - 将曲线拟合到分割图像

python - Scipy loadmat 只加载整数?

python - 内置计算协方差的函数

javascript - 平滑旋转javascript边缘浏览器问题