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

如何优化Numpy数组中两点间路径坐标的生成代码?

优化两点间指定路径的生成实现

需求回顾

给定包含1的NumPy数组,需要生成从第一个1的坐标到第二个1的坐标的路径坐标:先沿行方向移动至目标行,再沿列方向移动至目标列,路径需包含所有中间点及起止点。

原代码存在的问题

你当前的walking函数存在几个明显缺陷:

  • 直接修改输入的start列表,会导致外部变量被意外篡改,产生副作用
  • 循环范围逻辑错误:仅当end[0]为正数时才会执行行移动,若起始行大于目标行(比如从行3到行1),循环不会执行;且未包含起始点
  • 列移动逻辑错误:直接重复打印end,没有逐步生成列方向的中间点

更优实现方案

下面提供两种可靠的实现方式,分别适配纯Python场景和NumPy向量化场景:

方案1:纯Python实现(通用场景,支持所有方向移动)

def generate_path(start, end):
    path = []
    current_row, current_col = start
    
    # 处理行方向移动:覆盖从起始行到目标行的所有行,列保持起始列
    step_row = 1 if end[0] > current_row else -1 if end[0] < current_row else 0
    for row in range(current_row, end[0] + step_row, step_row):
        path.append([row, current_col])
    
    # 处理列方向移动:跳过已添加的目标行起始列点,生成到目标列的所有点
    if current_col != end[1]:
        step_col = 1 if end[1] > current_col else -1 if end[1] < current_col else 0
        for col in range(current_col + step_col, end[1] + step_col, step_col):
            path.append([end[0], col])
    
    return path

测试示例:

  • 示例1:generate_path([0,1], [2,1]) 返回 [[0,1], [1,1], [2,1]],符合预期
  • 示例2:generate_path([0,2], [4,4]) 返回 [[0,2], [1,2], [2,2], [3,2], [4,2], [4,3], [4,4]],符合预期
  • 反向移动测试:generate_path([4,4], [0,2]) 返回 [[4,4], [3,4], [2,4], [1,4], [0,4], [0,3], [0,2]],逻辑正确

该方案的优势:

  • 不修改输入参数,避免副作用
  • 支持行、列的正负方向移动(从上到下/从下到上,从左到右/从右到左)
  • 逻辑清晰,易读易维护

方案2:NumPy向量化实现(大数据量场景更高效)

如果需要处理大量坐标点,利用NumPy的向量化操作可以提升效率:

import numpy as np

def generate_path_np(start, end):
    # 生成行方向所有点
    row_range = np.arange(start[0], end[0] + 1, 1 if end[0] > start[0] else -1)
    row_points = np.column_stack((row_range, np.full(len(row_range), start[1])))
    
    # 生成列方向所有点(跳过已包含的终点行起始列)
    path = row_points
    if start[1] != end[1]:
        col_step = 1 if end[1] > start[1] else -1
        col_range = np.arange(start[1] + col_step, end[1] + col_step, col_step)
        col_points = np.column_stack((np.full(len(col_range), end[0]), col_range))
        path = np.vstack((row_points, col_points))
    
    return path.tolist()

测试示例:
调用generate_path_np([0,2], [4,4])会得到与示例2完全一致的路径列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:33