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

如何用Python在两个N维点间生成X个均匀分布的点

在N维点之间生成均匀分布点的Python实现

纯Python实现方案

无需依赖第三方库,通过线性插值计算每个维度的坐标:

def get_points(point_a, point_b, x):
    # 验证输入点的维度一致性
    if len(point_a) != len(point_b):
        raise ValueError("两个输入点的维度必须相同")
    
    # 特殊情况:仅需生成1个点时,直接返回其中一个点
    if x == 1:
        return [point_a]
    
    # 计算每个维度上的步长
    dimension_steps = [(b_coord - a_coord) / (x - 1) for a_coord, b_coord in zip(point_a, point_b)]
    
    # 生成所有均匀分布的点
    result_points = []
    for i in range(x):
        current_point = tuple(
            a_coord + i * step for a_coord, step in zip(point_a, dimension_steps)
        )
        result_points.append(current_point)
    
    return result_points

使用NumPy的简化实现

如果项目已依赖NumPy,可利用其linspace函数快速实现,代码更简洁且效率更高:

import numpy as np

def get_points_np(point_a, point_b, x):
    a_array = np.array(point_a)
    b_array = np.array(point_b)
    
    if a_array.shape != b_array.shape:
        raise ValueError("两个输入点的维度必须相同")
    
    # linspace自动处理多维数组的线性插值,最后转换为元组列表
    return [tuple(point) for point in np.linspace(a_array, b_array, x)]

测试示例

调用示例代码:

print(get_points((1, 1), (2, 2), 10))

预期输出包含10个从(1,1)到(2,2)均匀分布的点,每个点的坐标按(1 + i/9, 1 + i/9)计算(i从0到9)。

注意事项

  • 当x=1时,函数直接返回包含其中一个输入点的列表,避免除以0的错误。
  • 浮点数精度:由于浮点运算特性,极端情况下最后一个点可能与point_b存在微小误差,若需要严格匹配,可手动将结果的最后一个元素替换为point_b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:21:16