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

如何将Python二维数组以指定索引为中心填充至目标尺寸?

高效实现指定中心的二维数组填充(基于NumPy)

针对你需要将动态扩展的二维网格填充到固定大尺寸数组,且保持原数组指定索引为目标数组中心的需求,这里提供一个基于NumPy的高效实现方案,避免逐元素赋值的低效问题。

核心思路

  1. 先创建全为-1(未探索区域)的目标大数组;
  2. 根据原数组的指定中心坐标,计算原数组在目标数组中的放置位置,确保原数组的指定索引与目标数组的中心对齐;
  3. 利用NumPy的切片批量赋值完成填充(底层C实现,效率远高于Python循环)。

代码实现

import numpy as np

def pad_to_center(src_arr, max_width, max_height, src_center):
    # 初始化全为-1的目标数组,匹配原数组的数据类型
    target_arr = np.full((max_height, max_width), -1, dtype=src_arr.dtype)
    
    # 获取原数组的高、宽,以及指定的中心坐标(y轴在前,对应数组的行索引)
    h1, w1 = src_arr.shape
    src_y, src_x = src_center
    
    # 计算原数组在目标数组中的起始放置坐标
    start_y = (max_height // 2) - src_y
    start_x = (max_width // 2) - src_x
    
    # 计算结束坐标(起始坐标+原数组尺寸)
    end_y = start_y + h1
    end_x = start_x + w1
    
    # 批量赋值,高效完成填充
    target_arr[start_y:end_y, start_x:end_x] = src_arr
    
    return target_arr

示例验证

测试场景1:指定原数组中心为(1,1)

# 原3×3网格
src = np.array([
    [-1, 0, 5],
    [0, 0, 0],
    [5, 5, 5]
])
# 填充为5×5数组,原数组(1,1)为中心
result = pad_to_center(src, 5, 5, (1, 1))
print(result)

输出结果:

[[-1 -1 -1 -1 -1]
 [-1 -1  0  5 -1]
 [-1  0  0  0 -1]
 [-1  5  5  5 -1]
 [-1 -1 -1 -1 -1]]

测试场景2:指定原数组中心为(0,0)

result = pad_to_center(src, 5, 5, (0, 0))
print(result)

输出结果:

[[-1 -1 -1 -1 -1]
 [-1 -1 -1 -1 -1]
 [-1 -1 -1  0  5]
 [-1 -1  0  0  0]
 [-1 -1  5  5  5]]

适配你的RL场景说明

  • 针对你动态扩展的地图(从100×80逐步增大),每次地图更新后调用该函数,即可快速填充到500×500的固定尺寸数组;
  • 该方法保证原地图的指定中心始终处于目标数组的中心位置,避免因地图扩展导致的内容平移,符合你"从中心向外扩展"的需求;
  • 切片赋值为NumPy原生批量操作,无Python循环开销,适合强化学习训练中每一步的高效计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:15:40