Python 如何拟合没有模型的三维曲线数据?

Python 如何拟合没有模型的三维曲线数据?,python,scikit-learn,curve-fitting,Python,Scikit Learn,Curve Fitting,我有一个三维的散射曲线数据,我想拟合一个平滑的曲线。拟合曲线需要能够从中提取点 我没有它的模型,我也不费心做模型。我在考虑使用polyfit,但它似乎只适用于2D数据。我已经看到一个答案,建议将一个变量作为独立变量,并生成另外两个w.r.t it,比如x。我认为这不是一个好主意,因为y和z之间的关系被忽略了 我尝试使用scipy.interpolate.splprep。后来我意识到它不合适 import numpy as np import matplotlib.pyplot as plt fr

我有一个三维的散射曲线数据,我想拟合一个平滑的曲线。拟合曲线需要能够从中提取点

我没有它的模型,我也不费心做模型。我在考虑使用polyfit,但它似乎只适用于2D数据。我已经看到一个答案,建议将一个变量作为独立变量,并生成另外两个w.r.t it,比如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更平滑?或任何其他方法来拟合三维曲线

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

这是我的数据。

按照这个问题的第二个答案,我通过
sklearn
获得了一个系数结果。但我不知道如何使用它。如何使用它来获得平滑的数据


我很沮丧,无法找到绘制曲线或从中提取数据的方法。

没有“无模型拟合曲线”这样的事情。无论使用什么函数或方法在原始数据点之间插值,这都是您的模型-在
splprep
的情况下,模型是一组样条曲线。你只需要选择一个适合你需要的型号。你试过调整吗?@nekomatic谢谢你的评论,我第一次尝试时确实有点不对劲。在你提醒之后,我在数据中尝试了更大范围的参数s。在我的情况下,当s为6e12时,情况似乎有所改善。顺便问一下,我如何从splev的输出中提取任意点?我想你想要使用。请你发布一个数据链接好吗?我将通过我的网站的3D曲面“function finder”运行它,看看它是否能找到一个平滑的曲面方程,该方程非常适合数据。