python - 如何在没有模型的情况下拟合 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
。但我不知道如何使用它。如何使用它来获取平滑数据?
我很沮丧无法找到一种方法来绘制或从中提取数据。
解决方案
推荐阅读
- python - 为什么 Pandas tz_convert 无法将 2038 年的 UTC 转换为欧洲/伦敦时区?
- java - 如何使用 AzureBlobStorage Java SDK v10 仅使用 SAS 创建容器和上传数据
- javascript - 在 .Tpl 文件中注册后,RegForm 无法将用户发送到成功页面
- jdbc - 在特定时间运行 Confluent JDBC 连接器而不是使用轮询间隔?
- python - 列出元素的计数器
- javascript - 没有类组件的 React 中的 Mapbox
- python - 如何制作一个用 CFFI 包装的 C-DLL 来回调 python
- migration - Powerbuilder 10.5:升级还是迁移?
- swift - 新外形上的游戏区域存在问题
- swift - AVPlayer,视频结束后黑屏