首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >得到近似3D中某些点的最佳线性函数

得到近似3D中某些点的最佳线性函数
EN

Stack Overflow用户
提问于 2017-03-17 02:02:16
回答 1查看 407关注 0票数 0

我有4个点,用这些坐标表示:

代码语言:javascript
复制
X = [0.1, 0.5, 0.9, 0.18]
Y = [0.7, 0.5, 0.7, 0.3]
Z = [4.2, 3.3, 4.2, 2.5]

我必须得到近似这4个点的最佳线性函数(平面)。

我知道numpy.polyfit,但polyfit只适用于xy (2D),我能做什么?

EN

回答 1

Stack Overflow用户

发布于 2017-03-17 04:28:31

虽然不是完全通用的,但如果数据点可以合理地表示为相对于坐标平面的曲面,例如z= a_x + b_y +c,则可以使用np.linalg.lstsq

代码语言:javascript
复制
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

X = np.array([0.1, 0.5, 0.9, 0.18])
Y = np.array([0.7, 0.5, 0.7, 0.3])
Z = np.array([4.2, 3.3, 4.2, 2.5])

# least squares fit
A = np.vstack([X, Y, np.ones(len(X))]).T

a,b,c=  np.linalg.lstsq(A, Z)[0]

# plots

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# plot data as big red crosses
ax.scatter(X, Y, Z, color='r', marker='+', linewidth=10)

# plot plane fit as grid of green dots

xs = np.linspace(min(X), max(X), 10)
ys = np.linspace(min(Y), max(Y), 10)
xv, yv = np.meshgrid(xs, ys)
zv = a*xv + b*yv + c

ax.scatter(xv, yv, zv, color = 'g')
# ax.plot_wireframe(xv, yv, zv, color = 'g') # alternative fit plane plot
plt.show()

首先绘制数据,您可以为“自变量”平面选择不同的坐标对以避免病态结果。如果数据点看起来位于包含z轴的平面中,则使用xzyz

当然,你可以在一条直线上有退化的点,或者是正四面体的顶点。

为了获得更好的“几何拟合”,可以使用第一个拟合的平面作为旋转到该坐标系中的数据的第二最小二乘拟合的基础(如果数据“合理地”类似于平面)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42841632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档