numpy.pad 函数理解记忆

简要说明:昨天刚学到的知识,整理记录一下
pad函数(记:填充外围)
1. 参数
np.pad(array, pad_width, 'mode')
# array 操作对象
# pad_width 填充大小
# mode 填充方式
2.举例使用
# 为了方便理解,维度递增
import numpy as np
# 单维
# 创建一个长度为1的数组
nList = np.arange(1, 10)
# 对象前填充1层,后填充2层,填充类型为连续填充
nList1 = np.pad(nList, (1, 2), 'constant')
# 输出
print(nList)
print(nList1) 
# 结果:
[1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9 0 0]

# 可以观察到中间的填充大小是  (前填充层数, 后填充层数)
# 特殊形式:
nList1 = np.pad(nList, 3, 'constant')
# 前后均填充4层
# 二维
# 创建一个2x2 且值均为 整型1 的矩阵
nList = np.ones((2, 2), dtype=int)
# 矩阵 二维 的前端增加1, 后端增加2
# (所有二维中)一维 的前段增加3, 后端增加4
nList1 = np.pad(nList, ((1, 2), (3, 4)), 'constant')
# 输出
print(nList)
print(nList1)
# 结果
[[1 1]
 [1 1]]
 
[[0 0 0 0 0 0 0 0 0]
 [0 0 0 1 1 0 0 0 0]
 [0 0 0 1 1 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, 4)) => ((二维前, 二维后), (一维前, 一维后))
# 可以从左往右依次解读
# 现将原数据 [[1 1] [1 1]] 看成一维,即 
[x x]
# 然后前后分别添加1和2层(新增的记作y), 原数据就变成了:
[y x x y y]
# 再看第二组参数(3, 4) 即对下一维度(一维)的每一项前增加3层,后增加4层 
# 此时y为[0 0], x为[1 1] 添加完后就变成了:
y: [0 0 0 0 0 0 0 0 0]
x: [0 0 0 1 1 0 0 0 0]
# 最后带入上一层,即:
[[0 0 0 0 0 0 0 0 0]
 [0 0 0 1 1 0 0 0 0]
 [0 0 0 1 1 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0]]
# 知道怎么变换之后,一看就知道结果,实际不需要怎么麻烦

# 特殊形式:
# 所有维度前后均增2
nList2 = np.pad(nList, 2, 'constant')
# 输出
print(nList2)
# 结果
[[0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 1 1 0 0]
 [0 0 1 1 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]]
# 更多维度
nList = np.ones((2, 2, 2), dtype=int)
nList1 = np.pad(nList, 1, 'constant')
# 输出
print(nList1)
# 结果
[[[0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]]

 [[0 0 0 0]
  [0 1 1 0]
  [0 1 1 0]
  [0 0 0 0]]

 [[0 0 0 0]
  [0 1 1 0]
  [0 1 1 0]
  [0 0 0 0]]

 [[0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]
  [0 0 0 0]]]
# 理解方式类似于二维的
3.总结一下

针对多维 填充大小 格式的理解:

# 假如 n维
((第n维前, 第n维后), (第n-1维前, 第n-1维后), ..., (一维前, 一维后))
# 举例 5维
nList2 = np.pad(nList, ((1, 1), (2, 2), (3, 3), (4, 4), (5, 5)), 'constant')
# 说明:
# 五维前后增加1层 四维前后增加2层 三维前后增3层 二维增加4层 一维增加5层
# 结果
&*()@#*()!  # 太长了忽略
填充方式的几种类型
# constant 连续一样值填充  值为 (0, 0)  前为X  后为Y
# edge 用边缘值填充
# linear_ramp 边缘递减的填充方式
# maximum, mean, median, minimum分别用最大值、均值、中位数和最小值填充
# reflect, symmetric都是对称填充。前一个是关于边缘对称,后一个是关于边缘外的空气对称╮(╯▽╰)╭
# wrap用原数组后面的值填充前面,前面的值填充后面

参考链接:https://blog.csdn.net/hustqb/article/details/77726660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值