np.pad()用法

np.pad()用法

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

1.语法结构

np.pad(array,pad_width,mode,**kwargs)  # 返回填充后的numpy数组

array:要填充的numpy数组【要对谁进行填充】

pad_width:每个轴要填充的数据的数目【每个维度前、后各要填充多少个数据】

mode:填充的方式【采用哪种方式填充】

备注:如何理解轴的概念?

轴是指行/列的堆叠方向

  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个数值

… …

备注:

(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’)  # 错误写法,必须将两个元组合成一个大元组传参

3.参数mode解析

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

str类型取值包括:

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

字典类型,key包括:

stat_length:sequence、int、optional,用在"maximum", “mean”, “median”, "minimum"中,默认值是 None

constant_values:sequence、int、optional,用在"constant"中,默认值是 0

end_values:sequence、int、optional,用在"linear_ramp"中,默认值是 0

reflect_type:{‘even’, ‘old’},用在"reflect","symmetric"中

5.代码测试

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 =
", aa)

bb = np.pad(aa, (2, 4), ‘constant’)
print("bb =
", bb)

cc = np.pad(aa, ((2, 4), (3, 5)), ‘constant’)
print("cc =
", cc)

测试三维数组

aaa = np.arange(24).reshape(2, 3, 4)
print("aaa =
", 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 =
", bbb)
运行结果如下:

b = [0 0 1 2 3 4 5 0 0]
c = [0 0 1 2 3 4 5 0 0 0 0]
aa =
[[0 1 2]
[3 4 5]]
bb =
[[0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0]
[0 0 0 1 2 0 0 0 0]
[0 0 3 4 5 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 0]
[0 0 0 0 0 0 0 0 0]]
cc =
[[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 0 0 0 0 0]
[0 0 0 3 4 5 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 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0]]
aaa =
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
bbb =
[[[ 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 0 0 0 1 2 3 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 4 5 6 7 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 8 9 10 11 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 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 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 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 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 0 0 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 12 13 14 15 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 16 17 18 19 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 20 21 22 23 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 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 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 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 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 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 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 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 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 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 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]
[ 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 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 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 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 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 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 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 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 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 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 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 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]]
转载请注明博客出处:https://www.cnblogs.com/shuaishuaidefeizhu/p/14179038.html

一、参数解释

ndarray = numpy.pad(array, pad_width, mode, **kwargs)
array为要填补的数组
pad_width是在各维度的各个方向上想要填补的长度,如((1,2),(2,2)),表示在第一个维度上水平方向上padding=1,垂直方向上padding=2,在第二个维度上水平方向上padding=2,垂直方向上padding=2。如果直接输入一个整数,则说明各个维度和各个方向所填补的长度都一样。
mode为填补类型,即怎样去填补,有“constant”,“edge”等模式,如果为constant模式,就得指定填补的值,如果不指定,则默认填充0。
剩下的都是一些可选参数,具体可查看
https://docs.scipy.org/doc/numpy/reference/generated/numpy.pad.html
ndarray为填充好的返回值。
二、例子

1、对一维数组填充

【code】

import numpy as np
array = np.array([1, 1, 1])

(1,2)表示在一维数组array前面填充1位,最后面填充2位

constant_values=(0,2) 表示前面填充0,后面填充2

ndarray=np.pad(array,(1,2),‘constant’, constant_values=(0,2))

print(“array”,array)
print(“ndarray=”,ndarray)

【result】

array [1 1 1]
ndarray= [0 1 1 1 2 2]

2、对二维数组填充

【code】

import numpy as np
array = np.array([[1, 1],[2,2]])

“”"
((1,1),(2,2))表示在二维数组array第一维(此处便是行)前面填充1行,最后面填充1行;
在二维数组array第二维(此处便是列)前面填充2列,最后面填充2列
constant_values=(0,3) 表示第一维填充0,第二维填充3
“”"
ndarray=np.pad(array,((1,1),(2,2)),‘constant’, constant_values=(0,3))

print(“array”,array)
print(“ndarray=”,ndarray)

【result】

array [[1 1]
[2 2]]

ndarray= [[0 0 0 0 3 3]
[0 0 1 1 3 3]
[0 0 2 2 3 3]
[0 0 3 3 3 3]]

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`np.pad()`函数可以在多维数组的各个维度边缘添加指定数量的元素。该函数的语法如下: ```python numpy.pad(array, pad_width, mode='constant', **kwargs) ``` - `array`:要进行填充操作的多维数组。 - `pad_width`:在各个维度边缘添加的元素数量。可以是一个整数,表示在所有维度的边缘添加相同数量的元素;也可以是一个元组,表示在各个维度的边缘添加不同数量的元素,元组的每个元素表示对应维度的左右两边各自添加的元素数量。 - `mode`:填充模式。可以是以下几种模式之一: - `'constant'`:在填充元素外使用常数填充。 - `'edge'`:在填充元素外使用边缘值填充。 - `'linear_ramp'`:在填充元素外使用线性渐变填充。 - `'maximum'`:在填充元素外使用最大值填充。 - `'mean'`:在填充元素外使用均值填充。 - `'median'`:在填充元素外使用中位数填充。 - `'minimum'`:在填充元素外使用最小值填充。 - `'reflect'`:对称地填充元素。 - `'symmetric'`:以边缘为对称轴填充元素。 - `**kwargs`:其他可选参数,如填充元素的常数值。 示例代码: ```python import numpy as np # 创建一个 3x3 的数组 a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 在 a 的周围添加一圈 0,形成一个 5x5 的数组 b = np.pad(a, ((1, 1), (1, 1)), 'constant', constant_values=0) print(b) ``` 输出结果: ``` [[0 0 0 0 0] [0 1 2 3 0] [0 4 5 6 0] [0 7 8 9 0] [0 0 0 0 0]] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值