Python函数之np.pad

本文详细介绍了numpy库中的np.pad函数,该函数可以实现对一维和多维数组进行各种填充操作,例如使用常数、边缘值、递减序列等方式填充,并提供了丰富的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

np.pad:

常用于对一维或多维数组的填充,如在CNN网络中,常常要使用padding操作,从而减少由convolution操作带来的图片尺寸shrink等。

  • 一维数组
import numpy as np
arr1D = np.array([1, 1, 2, 2, 3, 4])
'''不同的填充方法'''
print 'constant:  ' + str(np.pad(arr1D, (2, 3), 'constant'))
print 'edge:  ' + str(np.pad(arr1D, (2, 3), 'edge'))
print 'linear_ramp:  ' + str(np.pad(arr1D, (2, 3), 'linear_ramp'))
print 'maximum:  ' + str(np.pad(arr1D, (2, 3), 'maximum'))
print 'mean:  ' + str(np.pad(arr1D, (2, 3), 'mean'))
print 'median:  ' + str(np.pad(arr1D, (2, 3), 'median'))
print 'minimum:  ' + str(np.pad(arr1D, (2, 3), 'minimum'))
print 'reflect:  ' + str(np.pad(arr1D, (2, 3), 'reflect'))
print 'symmetric:  ' + str(np.pad(arr1D, (2, 3), 'symmetric'))
print 'wrap:  ' + str(np.pad(arr1D, (2, 3), 'wrap'))

输出结果如下:
这里写图片描述

解释:
第一个参数是待填充数组
第二个参数是填充的形状,(2,3)表示前面两个,后面三个
第三个参数是填充的方法
填充方法:
constant连续一样的值填充,有关于其填充值的参数。constant_values=(x, y)时前面用x填充,后面用y填充。缺参数是为0000。。。
edge用边缘值填充
linear_ramp边缘递减的填充方式
maximum, mean, median, minimum分别用最大值、均值、中位数和最小值填充
reflect, symmetric都是对称填充。前一个是关于边缘对称,后一个是关于边缘外的空气对称
wrap用原数组后面的值填充前面,前面的值填充后面
也可以有其他自定义的填充方法

  • 二维数组
import numpy as np
arr3D = np.array([[[1, 1, 2, 2, 3, 4], [1, 1, 2, 2, 3, 4], [1, 1, 2, 2, 3, 4]], 
                  [[0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5]], 
                  [[1, 1, 2, 2, 3, 4], [1, 1, 2, 2, 3, 4], [1, 1, 2, 2, 3, 4]]])
                  '''对于多维数组'''
print 'constant:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'constant'))
print 'edge:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'edge'))
print 'linear_ramp:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'linear_ramp'))
print 'maximum:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'maximum'))
print 'mean:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'mean'))
print 'median:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'median'))
print 'minimum:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'minimum'))
print 'reflect:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'reflect'))
print 'symmetric:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'symmetric'))
print 'wrap:  \n' + str(np.pad(arr3D, ((0, 0), (1, 1), (2, 2)), 'wrap'))

这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述
转载自 [ 图文并茂的Python教程-numpy.pad ]

### 使用 `np.pad` 进行数组填充 NumPy 的 `pad` 函数用于对数组进行填充和扩展操作,支持多种填充方式。下面介绍几种常见的填充模式及其应用实例。 #### 常数填充 (`constant`) 常数填充是最简单的填充方式之一,在指定位置填充值为给定常量的元素。对于一维、二维或多维数组均适用: ```python import numpy as np # 创建一个简单的一维数组并使用常数填充 arr_1d = np.array([1, 2, 3]) padded_arr_1d = np.pad(arr_1d, (1, 2), mode='constant', constant_values=(0,)) print(f"One-dimensional array with padding:\n{padded_arr_1d}") ``` 上述代码创建了一个长度为3的一维数组,并在其前后分别增加了宽度为1和2的零值填充[^2]。 #### 边缘复制填充 (`edge`) 边缘复制填充会根据边界上的数值来重复填充新区域,适用于保持原有数据特征的同时扩大尺寸的情况: ```python # 对于二维数组采用边缘复制的方式填充 arr_2d = np.ones((2, 3)) padded_arr_2d_edge = np.pad(arr_2d, ((1, 1), (2, 2)), mode='edge') print(f"Two-dimensional array padded using edge values:\n{padded_arr_2d_edge}") ``` 这段代码展示了如何利用现有矩阵边界的最后一个元素作为新增部分的内容[^1]。 #### 循环折叠填充 (`wrap`) 循环折叠填充可以实现周期性的图案效果,即当超出范围时重新回到起始处取样: ```python # 利用 wrap 方式处理三维数组 arr_3d = np.arange(8).reshape((2, 2, 2)) % 5 + 1 padded_arr_3d_wrap = np.pad(arr_3d, ((0, 1), (0, 1), (0, 1)), mode='wrap') print(f"Three-dimensional array wrapped around edges:\n{padded_arr_3d_wrap}") ``` 这里通过设置不同的轴向偏移实现了更复杂的三维结构变换。 除了这些基本的例子外,还有其他类型的填充选项如线性渐变(`linear_ramp`)、反射镜像(`reflect`)等可根据具体需求选用。值得注意的是,在实际编程过程中应当注意参数的选择以及维度匹配等问题以确保预期的结果能够正确呈现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值