题目描述:使用数字0将一个全为1的数组包围起来:
代码:
In [74]: a = np.ones((5,5))
In [75]: a
Out[75]:
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
In [76]: b = np.pad(a, pad_width=1, mode='constant', constant_values=0)
In [77]: b
Out[77]:
array([[0., 0., 0., 0., 0., 0., 0.],
[0., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 0.],
[0., 1., 1., 1., 1., 1., 0.],
[0., 0., 0., 0., 0., 0., 0.]])
这一道题目的关键在于pad()函数,pad()函数作用是填充一个数组,因此经常用在图像矩阵的边缘填充中:
函数结构
pad(array, pad_width, mode, **kwars)
参数说明
- array:将要进行填充的数组
- pad_width:填充的各个方向的宽度,可以指定不同方向的宽度,如果只输入一个值,那么表示每个方向的填充宽度都一样
- mode:填充的方式,可以取的值有 constant、edge等等
其中,最为常用的填充方式就是 constant,表示连续填充相同的值,就比如在例题中所用的方式很显然就是这种
constant_values可以指定填充的值 - 其余的是一些不常用的可选参数
接下来看几个例子就很好理解了:
例如:
In [1]: import numpy as np
In [2]: a = np.ones((2,2), dtype=np.int)
In [3]: a
Out[3]:
array([[1, 1],
[1, 1]])
# 设置填充的宽度方向不一致
In [4]: b = np.pad(a, pad_width=(1,2), mode='constant', constant_values=0)
In [5]: b
Out[5]:
array([[0, 0, 0, 0, 0],
[0, 1, 1, 0, 0],
[0, 1, 1, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
#设置填充的值在不同方向上不一样
In [7]: c = np.pad(a, pad_width=1, mode='constant', constant_values=(3,4))
In [8]: c
Out[8]:
array([[3, 3, 3, 4],
[3, 1, 1, 4],
[3, 1, 1, 4],
[3, 4, 4, 4]])
从上面的例子中我们可以看到,如果pad_width传入的参数是(a,b)
这种形式的,数组的“前面”的填充长度是a,“后面”的填充长度是b,这个前后在一维数组的填充中会比较明显:
In [9]: a = np.array([1,2,3])
In [10]: a
Out[10]: array([1, 2, 3])
In [11]: b = np.pad(a, pad_width=(1,2), mode='constant', constant_values=0)
In [12]: b
Out[12]: array([0, 1, 2, 3, 0, 0])
至于其他的填充方式,举几个例子:
In [14]: a
Out[14]: array([2, 3, 4])
# 边缘填充, 也就是用边缘值进行两侧填充
In [15]: b = np.pad(a, pad_width=2, mode='edge')
In [16]: b
Out[16]: array([2, 2, 2, 3, 4, 4, 4])
#最大值填充,不用指定填充值 使用数组的最大值进行填充
In [17]: c = np.pad(a, pad_width=2, mode='maximum')
In [18]: c
Out[18]: array([4, 4, 2, 3, 4, 4, 4])
#均值填充
In [19]: d = np.pad(a, pad_width=2, mode='mean')
In [20]: d
Out[20]: array([3, 3, 2, 3, 4, 3, 3])
#递减填充,按照两侧的规律进行递减到0填充 左侧 2->1->0 右侧 4->2->0 (等差到0)
In [21]: e = np.pad(a, pad_width=2, mode='linear_ramp')
In [22]: e
Out[22]: array([0, 1, 2, 3, 4, 2, 0])
以上~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116760.html