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

如何在二维非规则网格数据中对指定切片进行插值?

解决方案:针对指定散点的非规则网格插值

可以用scipy.interpolate里的LinearNDInterpolator或者NearestNDInterpolator,这两个工具专门处理散点插值,不需要生成整个新网格,只需要对你指定的少量点计算插值结果,完全符合你的需求。

具体实现步骤:

  1. 把原非规则网格的所有点和对应的psi值转换成一维散点集合(不管原网格是规则还是非规则,这一步都通用);
  2. 初始化插值器,传入散点坐标和对应的psi值;
  3. 直接用插值器计算目标点(x_points和y_points)的插值结果。

修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import LinearNDInterpolator

# 原网格数据(这里示例是规则网格,换成你的非规则网格也一样)
x = np.linspace(-50,50,100)
y = np.linspace(400,500,100)
X, Y = np.meshgrid(x,y)

Vec = np.array([X, Y])
psi = 90 - np.rad2deg(np.arccos(Vec[0,:,:] / np.linalg.norm(Vec, axis=0)))
R = np.sqrt(X ** 2 + Y ** 2)

# 目标插值点
x_points = np.linspace(x.min(), x.max())
y_points = [480] * len(x_points)
target_points = np.column_stack((x_points, y_points))

# 转换原网格为散点集
scatter_x = X.flatten()
scatter_y = Y.flatten()
scatter_psi = psi.flatten()

# 初始化线性插值器(换成NearestNDInterpolator就是最近邻插值)
interpolator = LinearNDInterpolator((scatter_x, scatter_y), scatter_psi)

# 计算目标点的插值结果
psi_interp = interpolator(target_points)

# 可视化验证
fig, ax = plt.subplots()
contour = ax.contourf(X, R, psi, levels=20)
ax.plot(x_points, y_points, color='blue', label='插值切片')
# 把插值结果画出来对比
ax.scatter(x_points, y_points, c=psi_interp, cmap=contour.cmap, vmin=psi.min(), vmax=psi.max(), label='插值结果')
plt.colorbar(contour, ax=ax)
ax.legend()
plt.show()

为什么这个方法适合你:

  • 不需要生成整个新网格,只计算你指定的少量目标点,计算成本极低;
  • 完全支持非规则网格数据,只要你能提供所有网格点的坐标和对应的psi值即可;
  • 可以选择不同的插值方式:线性插值(LinearNDInterpolator)适合平滑过渡,最近邻插值(NearestNDInterpolator)适合保留原始数据的阶跃特征。

如果你的非规则网格数据本身就是散点形式(不是meshgrid生成的),直接用散点坐标初始化插值器就行,不需要flatten步骤。

内容的提问来源于stack exchange,提问作者A. Heintz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:43:17