You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除拟合二阶多项式曲面上方的3D坐标点?

移除拟合二阶多项式曲面上的点的实现方法

要移除所有位于拟合曲面上方的点,只需完成两步核心操作:计算每个原始点对应的曲面预测高度,再筛选出高度小于等于预测值的点。以下是基于你提供的代码修改后的完整实现:

核心逻辑

  • 用训练好的模型,计算每个原始(x,y)点在拟合曲面上的预测z值z_pred
  • 对比原始z值与z_pred,保留z <= z_pred的点(移除z大于预测值的点,即曲面上方的点)

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

np.random.seed(10)
x = np.random.rand(10)
y = np.random.rand(10)
z = np.random.rand(10)
X = np.column_stack((x, y))

# 拟合二阶多项式曲面
poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
model = LinearRegression()
model.fit(X_poly, z)

# 计算每个原始点对应的曲面预测z值
z_pred = model.predict(poly.transform(X))
# 生成筛选掩码:保留z <= 预测值的点(移除曲面上方的点)
mask = z <= z_pred
# 应用掩码筛选点
x_filtered = x[mask]
y_filtered = y[mask]
z_filtered = z[mask]

# 生成曲面网格用于可视化
xi, yi = np.meshgrid(np.linspace(np.min(x), np.max(x), 10),
                     np.linspace(np.min(y), np.max(y), 10))
X_grid = np.column_stack((xi.flatten(), yi.flatten()))
X_grid_poly = poly.transform(X_grid)
z_grid = model.predict(X_grid_poly)
zi = np.reshape(z_grid, xi.shape)

# 可视化筛选后的点和拟合曲面
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(projection='3d')
ax.scatter(x_filtered, y_filtered, z_filtered, c='r', s=20, label='保留的点')
ax.scatter(x[~mask], y[~mask], z[~mask], c='gray', s=20, alpha=0.5, label='移除的点')
ax.plot_surface(xi, yi, zi, alpha=0.5)
ax.legend()
plt.show()

代码细节说明

  • z_pred = model.predict(poly.transform(X)):对原始(x,y)点做多项式特征转换后,用训练好的模型预测每个点在曲面上的高度
  • mask = z <= z_pred:创建布尔掩码,标记需要保留的点
  • 可视化时额外添加了被移除点的灰色半透明显示,方便直观对比筛选效果

内容的提问来源于stack exchange,提问作者greensquare68

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:32:35