我在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
的系数结果。但是我不知道如何使用它。如何使用它来获取平滑的数据?
我很沮丧,无法找到方法或从中提取数据。