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

对零填充二维Numpy数组切片的实现,Numpy是否有内置方法?

Numpy实现灵活零填充与切片提取的内置方案

Numpy内置的np.pad()函数完全可以满足你的需求,搭配切片语法就能实现示例中的效果。

核心用法说明

np.pad()支持指定数组上下左右的填充长度,默认填充值为0,刚好匹配你的零填充需求。基础语法:

np.pad(arr, pad_width, mode='constant', constant_values=0)

其中pad_width是二维元组,格式为((上填充行数, 下填充行数), (左填充列数, 右填充列数))。

对应示例实现

第一个示例效果

先给原数组做足够的上下左右填充,再通过切片截取目标区域:

import numpy as np

a = np.arange(16).reshape((4, 4))
# 上填充4行、下填充2行;左填充2列、右填充5列(右填充量只要足够即可)
padded_a = np.pad(a, ((4, 2), (2, 5)), mode='constant')
# 截取前6行、前4列得到目标结果
result1 = padded_a[:6, :4]
print(result1)
# 输出:
# [[0 0 0 0]
#  [0 0 0 0]
#  [0 0 0 0]
#  [0 0 0 0]
#  [0 0 1 2]
#  [0 4 5 6]]

如果想用你示例中的负索引切片方式,可以先给数组做超大范围填充,让原数组处于中间区域,再用负索引定位:

# 上下左右各填充10行/列,生成足够大的画布
padded_large = np.pad(a, ((10, 10), (10, 10)), mode='constant')
# 负索引切片获取和上面一致的结果
result1_alt = padded_large[-4:6, -9:5]

第二个示例效果

基于同一个填充后的数组,调整切片范围即可得到目标输出:

result2 = padded_a[:6, 1:8]
print(result2)
# 输出:
# [[0 0 0 0 0 0 0]
#  [0 0 0 0 0 0 0]
#  [0 0 0 0 0 0 0]
#  [0 0 0 0 0 0 0]
#  [0 0 1 2 3 0 0]
#  [0 4 5 6 7 0 0]]

灵活调整技巧

  • 若要动态截取不同区域,先确定原数组在填充后数组中的位置,再用正/负索引切片即可。
  • 不确定填充量时,直接给上下左右填充足够大的固定值(比如100行/列),就能随意截取包含原数组和周围零填充的区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:57:41