首页 > 解决方案 > 如何在没有模型的情况下拟合 3D 曲线数据?

问题描述

我有一个 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 然后子到模型并获得平滑数据集。

这是我的数据。 一条曲线

在 3 维中使用 np.polyfit 拟合多项式 按照这个问题的第二个答案,我设法得到了一个系数结果sklearn。但我不知道如何使用它。如何使用它来获取平滑数据?

我很沮丧无法找到一种方法来绘制或从中提取数据。

标签: pythonscikit-learncurve-fitting

解决方案


推荐阅读