如何用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
相关产品推荐
相关产品推荐

