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

如何将行水平间距可变的二维NumPy数组重采样为指定水平间距并插值?

二维变间距高度数组的重采样与插值方案

核心思路

要把每行水平间距不一的高度数组转换成等间距格式,核心是先建立原始数据的横坐标映射,再将其插值到目标等间距的横坐标上——由于每行的水平间距仅与y轴位置相关,既可以逐行独立处理,也可以结合行间信息做全局优化。

具体操作步骤

  1. 计算每行的原始横坐标序列
    假设第i行(y方向索引,范围0到y-1)的相邻元素水平间距为d_i,该行包含x个高度点,那么该行每个点的实际横坐标为:

    x_raw = [0, d_i, 2*d_i, ..., (x-1)*d_i]
    

    对应的高度值就是该行的数组元素h_raw = arr[i]。

  2. 确定目标等间距的横坐标序列
    设指定的目标水平间距为D:

    • 若要保留每行的实际长度范围,目标点数为n_i = floor((x-1)*d_i / D) + 1,目标横坐标为:
      x_target = [0, D, 2*D, ..., (n_i-1)*D]
      
    • 若需要所有行的宽度统一,先计算所有行的最大总长度L_max = max((x-1)*d_i for i in 0..y-1),再确定统一的目标点数n = floor(L_max / D) + 1,所有行都映射到这个长度的横坐标序列上。
  3. 对每行执行插值计算
    将h_raw在x_raw上的分布,插值到x_target的位置,即可得到该行的等间距高度数组。

可选的插值方案

存在多种插值方案,不同方案在精度、计算速度、平滑度上各有侧重:

  • 最近邻插值:直接取距离目标横坐标最近的原始高度值。计算极快,但插值结果会有明显锯齿,适合对精度要求低、追求效率的场景。
  • 线性插值:找到目标点左右相邻的两个原始点,用距离加权计算高度值。计算简单,精度适中,是最常用的通用方案。
  • 三次样条插值:用相邻3-4个原始点构建三次多项式,插值结果连续平滑,精度高,但计算量较大,适合需要高度平滑曲线的场景(比如地形可视化)。
  • 拉格朗日插值:用更多原始点构建高阶多项式,但容易出现龙格现象(边缘震荡),实际场景中很少使用。

如果需要考虑行与行之间的高度关联性(比如整体地形的连续性),也可以将整个二维数组作为不规则网格,使用双线性插值或双三次插值做全局重采样,但这种方式计算量更大,适合对整体平滑度要求高的场景。

内容的提问来源于stack exchange,提问作者Carsten Drösser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:52:43