如何在没有模型的情况下拟合3D曲线数据?

时间:2018-07-19 08:41:22

标签: python scikit-learn curve-fitting

我在3D z=f(x,y)中有一个分散的弯曲数据,我想将其拟合为平滑的曲线。拟合曲线需要能够从中提取点。

我没有模型,我也不想打模型。我当时在考虑使用polyfit,但似乎仅适用于2D数据。我已经看到了一个答案,建议将一个变量设为独立变量并生成另外两个变量,比如说x。我认为这不是个好主意,因为y和z之间的关系被忽略了。

我尝试使用scipy.interpolate.splprep。后来我意识到花键不合适。

import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
from mpl_toolkits.mplot3d import Axes3D


tck, u = interpolate.splprep([xdata,ydata,zdata], s=2)
x,y,z = interpolate.splev(u,tck)

fig1 = plt.figure(1)
ax3d = fig1.add_subplot(111, projection='3d')
ax3d.plot(xdata,ydata,zdata, 'bo')
ax3d.plot(x,y,z, 'r-')

有没有办法使interpolate.splprep更平滑?或采用其他任何方法拟合3D曲线?

修改 我设法通过增加一些s使曲线更平滑。 由splev给出的x,y,z像原始数据一样分布不均匀。如何从平滑曲线中提取均匀分布的数据。 或者我的意思是我可以通过splprep获得平滑的样条曲线模型,我可以先np.linspace x和y,然后再细分到模型并获得平滑的数据集。

这是我的数据。 A curve

Fitting a polynomial using np.polyfit in 3 dimensions 按照这个问题的第二个答案,我设法得到了sklearn的系数结果。但是我不知道如何使用它。如何使用它来获取平滑的数据?

我很沮丧,无法找到方法或从中提取数据。

0 个答案:

没有答案