曲线插值:以什么顺序考虑坐标?
Interpolation of a Curve: In what order are coordinates considered?
我正在尝试了解插值的工作原理以及在我的曲线中插值时导致之字形变化的原因。我假设插值按输入的顺序考虑点是正确的,还是我认为可能有更复杂的事情发生?
我的散点曲线输出
from scipy import interpolate
yao = np.asarray(yo[0::10])
xao = np.asarray(xo[0::10])
#plt.plot(xao, yao)
print(len(xao))
okayo = np.where(np.abs(np.diff(xao)) + np.abs(np.diff(yao)) > 0)
xpo = np.r_[xao[okayo], xao[-1]]
print(len(xpo))
ypo = np.r_[yao[okayo], yao[-1]]
tcko, uo = interpolate.splprep([xpo, ypo], s=3, k=1, per=False)
xo, yo = interpolate.splev(np.linspace(0, 1, 100), tcko)
fig = plt.figure()
ax = plt.subplot(111)
ax.plot(xao, yao, '.', markersize=2)
ax.plot(xo, yo, alpha=0.5)
与我按已知顺序输入较少的点相反
我以为我理解了插值,但这种锯齿状的变化让我很困惑。任何帮助理解都会很棒,谢谢。
您的数据不可用,因此无法重现结果,但图表看起来很合理。您使用的函数很可能将您的输入视为时间序列数据,例如,如果您希望信号值从 500 反弹到 1000,则在上图插值是正确的,当您在底部图上指定顺序时,您基本上输入了另一个信号其中值平滑变化,内插值也是如此。
我正在尝试了解插值的工作原理以及在我的曲线中插值时导致之字形变化的原因。我假设插值按输入的顺序考虑点是正确的,还是我认为可能有更复杂的事情发生?
我的散点曲线输出
from scipy import interpolate
yao = np.asarray(yo[0::10])
xao = np.asarray(xo[0::10])
#plt.plot(xao, yao)
print(len(xao))
okayo = np.where(np.abs(np.diff(xao)) + np.abs(np.diff(yao)) > 0)
xpo = np.r_[xao[okayo], xao[-1]]
print(len(xpo))
ypo = np.r_[yao[okayo], yao[-1]]
tcko, uo = interpolate.splprep([xpo, ypo], s=3, k=1, per=False)
xo, yo = interpolate.splev(np.linspace(0, 1, 100), tcko)
fig = plt.figure()
ax = plt.subplot(111)
ax.plot(xao, yao, '.', markersize=2)
ax.plot(xo, yo, alpha=0.5)
与我按已知顺序输入较少的点相反
我以为我理解了插值,但这种锯齿状的变化让我很困惑。任何帮助理解都会很棒,谢谢。
您的数据不可用,因此无法重现结果,但图表看起来很合理。您使用的函数很可能将您的输入视为时间序列数据,例如,如果您希望信号值从 500 反弹到 1000,则在上图插值是正确的,当您在底部图上指定顺序时,您基本上输入了另一个信号其中值平滑变化,内插值也是如此。