2022年 11月 9日

python pad_python中的np.pad

最近开始学习deep learning,python成为一大障碍,主要是numpy中的函数不知如何使用啊!不断踩坑。此帖用来记录学习过程中学习到python的numpy的使用。

1、np.array

先说说python中的数组吧np.array(),一开始np.array都不太能理解,举个栗子,np.array([[1, 2, 3], [4, 5, 6]]),这是一个二维数组,是由两个一维数组组成的。可以类比3维或者更高维的数组。

x = np.array([[1,2,3],[1,2,3]])

print(“x.shape =”,x.shape)

print(“x =”, x)

“””

x.shape = (2, 3) 说明这个二维数组是由两个一维数组组成,每个一维数组中有3个元素

x = [[1 2 3]

[1 2 3]]

“””

#类比3维数组

x = np.random.randn(2,2,2)

print(x.shape)

print(x)

“””

(2, 2, 2) 说明这个三维数组是由2个2维数组组成,2维数组又是由2个1维数组构成,1为数组中有两个元素

[[[ 1.62434536 -0.61175641]

[-0.52817175 -1.07296862]]

[[ 0.86540763 -2.3015387 ]

[ 1.74481176 -0.7612069 ]]]

“””

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

有了上面对维度的理解,np.pad这是用来填充数组矩阵的行数和列数的,网上的各种教程说的玄乎玄乎,又是这边加一行,那边加一列,晕了。经过试验有了自己的理解,其实就是添加数组组成中的元素的个数,好像还很玄乎,举个栗子

np.random.seed(1)

x = np.random.randn(2,2,2) #创建一个随机的3维数组

y = np.pad(x,((1,1),(2,2),(2,3)),”constant”)

print(x)

print(y)

“””

可以很清楚的看到,原来的x是3维数组,有2个二维数组组成,每个二维数组是由2个一位数组组成,每个一维数组又有2个元素。

通过np.pad处理后,(1,1)为第三维添加2个2为数组,也就是变成了4个二维数组构成了三维数组;

(2,2)为每个二维数组的组成添加了4个一维数组,也就是成了6个一维数组组成二维数组;

(2,3)为一维数组添加元素,一共添加了5个,前面2个,后面3个,总共变成了7个;

x = [[[ 1.62434536 -0.61175641]

[-0.52817175 -1.07296862]]

[[ 0.86540763 -2.3015387 ]

[ 1.74481176 -0.7612069 ]]]

y = [[[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 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.62434536 -0.61175641 0. 0. 0. ]

[ 0. 0. -0.52817175 -1.07296862 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]]

[[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0.86540763 -2.3015387 0. 0. 0. ]

[ 0. 0. 1.74481176 -0.7612069 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]]

[[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]

[ 0. 0. 0. 0. 0. 0. 0. ]]]

“””

3、选择性的数组输出

类似于Matlab中的输出x[2, 2]、x[2, : ]