np.pad()详解

👨‍💻个人简介: 深度学习图像领域工作者,5年工作经验(目标检测、分割、分类、Matting)
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


1. 作用:

np.pad()用来在numpy数组的边缘进行数值填充,例如CNN网络常用的padding操作

2. 语法结构

np.pad(array,pad_width,mode,**kwargs)  

2.1 参数说明:

array:要填充的numpy数组【要对谁进行填充】
pad_width:每个轴要填充的数据的数目【每个维度前、后各要填充多少个数据】
mode:填充的方式【采用哪种方式填充】

2.1.1 参数pad_width解析

pad_width参数类型:sequence,array_like,int
pad_width参数格式:((before_1, after_1), (before_2, after_2), … , (before_N, after_N))

第一个元素(before_1, after_1)表示第一维【列】的填充方式:前面填充before_1个数值,后面填充after_1个数值
第2个元素(before_2, after_2)表示第二维【行】的填充方式:前面填充before_2个数值,后面填充after_2个数值
… …

2.1.2 说明

(1)一维数组的rank = 1,所以对一维数组填充时,其pad_width参数只能是一个元组(before_1, after_1),当然也可以是一个int类型,表示前后填充的数值个数相同,例如:

a = np.array([1, 2, 3, 4, 5])
b = np.pad(a, 2, 'constant')  # 正确写法
c = np.pad(a, (2, 4), 'constant')  # 正确写法
d = np.pad(a, ((2, 4), (3, 5)), 'constant')  # 错误写法,因为a是一维数组,而(3, 5)表示在第二个维度进行填充

(2)二维数组的rank = 2,因此对二维数组填充时,其pad_width参数可以是两个并列的元组((before_1, after_1), (before_2, after_2)),但要注意将其合并为一个整体(即外加括号变成一个大元组)一起进行传参。
当然也可以是一个元组(before, after),表示两个维度都按照此方式填充;
当然也可以是一个int类型,表示两个维度前后填充的个数都相同;
例如:

aa = np.arange(6).reshape(2, 3)
bb = np.pad(aa, 2, 'constant')  # 正确写法
cc = np.pad(aa, (2, 4), 'constant')  # 正确写法
dd = np.pad(aa, ((2, 4), (3, 5)), 'constant')  # 正确写法
ee = np.pad(aa, (2, 4), (3, 5), 'constant')  # 错误写法,必须将两个元组合成一个大元组传参

2.2 参数mode解析

mode参数类型:str(10种取值)、function

str类型取值包括:

‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0
‘edge’——表示用边缘值填充
‘linear_ramp’——表示用边缘递减的方式填充
‘maximum’——表示最大值填充
‘mean’——表示均值填充
‘median’——表示中位数填充
‘minimum’——表示最小值填充
‘reflect’——表示对称填充
‘symmetric’——表示对称填充
‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面

2.3 如何理解轴的概念?

轴是指行/列的堆叠方向

在这里插入图片描述

3. 测试代码:

import numpy as np

# 测试一维数组
a = np.array([1, 2, 3, 4, 5])

b = np.pad(a, 2, 'constant')
print("b = ", b)

c = np.pad(a, (2, 4), 'constant')
print("c = ", c)


# 测试二维数组
aa = np.arange(6).reshape(2, 3)
print("aa = \n", aa)

bb = np.pad(aa, (2, 4), 'constant')
print("bb = \n", bb)

cc = np.pad(aa, ((2, 4), (3, 5)), 'constant')
print("cc = \n", cc)


# 测试三维数组
aaa = np.arange(24).reshape(2, 3, 4)
print("aaa = \n", aaa)

np.set_printoptions(threshold=np.inf) # 将numpy数组完全展开
bbb = np.pad(aaa, ((2, 3), (4, 5), (6, 7)), 'constant')# 块上加了2/3,列上加了4/5,行上加了6/7
print("bbb = \n", bbb)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python图像识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值