pad()
方法通过在数组的轴周围添加指定值来实现期望的长度。
示例
import numpy as np
# create a 2D array
array = np.array([[1, 2],
[3, 4]])
# pad the array with zeros
padded_array = np.pad(array, pad_width=1)
print(padded_array)
'''
Output:
[[0 0 0 0]
[0 1 2 0]
[0 3 4 0]
[0 0 0 0]]
'''
pad() 语法
pad()
的语法是
numpy.pad(array, pad_width, mode = 'constant', **kwargs)
pad() 参数
pad()
方法接受多个参数
array
- 要填充的数组pad_width
- 在每个轴上填充值的数量mode
(可选) - 决定如何填充值**kwargs
(可选) - 可以使用的其他关键字参数
pad() 返回值
pad()
方法返回一个在新数组的边界上填充了值的数组。
填充 2D 数组
import numpy as np
# create a 2D array
array = np.array([[1, 2],
[3, 4]])
# pad the array with one zero on all sides
padded_array = np.pad(array, pad_width=1)
print('Array padded by width 1 on all sides:\n', padded_array)
# pad the array with one zero before and 2 zeros after the original array,
# one zero on top and left and two zeros on the right and bottom sides
padded_array = np.pad(array, pad_width=(1, 2))
print('Array padded by width (1,2):\n', padded_array)
# pad the array with zeros using different widths for each axis
# (1, 2) on top and bottom, (2, 1) on left and right
padded_array = np.pad(array, pad_width=((1, 2), (2, 1)))
print('Array padded by width (1,2), (2,1):\n', padded_array)
输出
Array padded by width 1 on all sides: [[0 0 0 0] [0 1 2 0] [0 3 4 0] [0 0 0 0]] Array padded by width (1,2): [[0 0 0 0 0] [0 1 2 0 0] [0 3 4 0 0] [0 0 0 0 0] [0 0 0 0 0]] Array padded by width (1,2), (2,1): [[0 0 0 0 0] [0 0 1 2 0] [0 0 3 4 0] [0 0 0 0 0] [0 0 0 0 0]]
pad() 中的 mode 参数
mode
是 pad() 中的一个可选参数,它指定了填充数组元素的模式。
mode 可以是
'constant'
: 用常量值填充'edge'
: 用最近的边缘值填充'linear_ramp'
: 用边缘值和结束值之间的线性斜坡填充'maximum'
: 用输入数组的最大值填充'mean'
: 用输入数组的平均值填充'median'
: 用输入数组的中值填充'minimum'
: 用输入数组的最小值填充'reflect'
: 通过镜像数组的值来填充'symmetric'
: 通过镜像值来填充,包括边界值'wrap'
: 用数组的循环包装来填充'empty'
: 用未定义的值填充
**kwargs
参数允许你传递特定于所选填充模式的其他关键字参数。不同的模式有由**kwargs
指定的不同可选参数来定制它们的行为。
示例 1: 使用 'constant' 模式填充
在numpy.pad()
中,我们可以使用'constant'
模式来设置填充值。它需要一个额外的参数constant_values
。
让我们看一个例子。
import numpy as np
# create a 1-D array
array1 = np.array([1, 2, 3, 4])
# pad an array with a constant value -1
array2 = np.pad(array1, pad_width = 1, mode = 'constant', constant_values = -1)
print(array2)
输出
[-1 1 2 3 4 -1]
注意事项
'constant'
是默认模式。- 如果未指定
constant_values
,则默认使用0。
示例 2: 使用 'edge' 模式填充
在numpy.pad()
中,'edge'
模式将数组边缘的值向外扩展。
import numpy as np
# create an 1D array
array1 = np.array([1, 2, 3, 4])
# pad array with edge values
array2 = np.pad(array1, pad_width = 1, mode = 'edge')
print(array2)
输出
[1 1 2 3 4 4]
示例 3: 使用 'linear_ramp' 模式填充
在numpy.pad()
中,'linear_ramp'
指定了开始和结束的填充值。它支持一个额外的参数end_values
。
import numpy as np
# create a 1D array
array1 = np.array([1, 2, 3, 4])
# pad the array by applying linear_ramp from 4 to -1 on both sides
array2 = np.pad(array1, pad_width = 1, mode = 'linear_ramp', end_values = (4, -1))
print("Array padded with linear ramp:\n", array2)
# pad the array with wider padding and the same linear ramp
array3 = np.pad(array1, pad_width = 2, mode='linear_ramp', end_values = (4, -1))
print("Array padded with linear ramp and wider padding:\n", array3)
输出
Array padded with linear ramp: [ 4 1 2 3 4 -1] Array padded with linear ramp and wider padding: [ 4 2 1 2 3 4 1 -1]
注意:linear_ramp
模式要求指定的end_values
与数组具有相同的dtype
。
示例 4: 使用 'maximum' 和 'minimum' 模式填充
在numpy.pad()
中,'maximum'
模式用输入数组的最大值填充输入数组,而'minimum'
模式用最小值填充。它们支持一个额外的参数stat_length
。
stat_length
指定用于计算统计值的每个轴边缘的值的数量。默认情况下它是None
,表示使用整个数组。
import numpy as np
# create a 1-D array
array1 = np.array([1, 2, 3, 4])
# pad the array with the maximum value from the array
array2 = np.pad(array1, pad_width = 1, mode = 'maximum')
print(array2) # [4 1 2 3 4 4]
# pad the array with the minimum value from the array
array3 = np.pad(array1, pad_width = 1, mode = 'minimum')
print(array3) # [1 1 2 3 4 1]
# pad the array with the maximum value from two adjacent edge values
array4 = np.pad(array1, pad_width = 1, mode = 'maximum',stat_length = 2)
print(array4) # [2 1 2 3 4 4]
# pad array with the minimum value from two adjacent edge values
array5 = np.pad(array1, pad_width = 1, mode = 'minimum',stat_length = 2)
print(array5) # [1 1 2 3 4 3]
示例 5: 使用 'mean' 和 'median' 模式填充
在numpy.pad()
中,'mean'
模式用输入数组的平均值填充输入数组,而'median'
模式用输入数组的中值填充输入数组。它们支持一个额外的参数stat_length
。
stat_length
指定用于计算统计值的每个轴边缘的值的数量。默认情况下它是None
,表示使用整个数组。
import numpy as np
# create an 1D array
array1 = np.array([1, 3, 5, 9, 11])
# pad array with the mean value from the whole array
array2 = np.pad(array1, pad_width = 1, mode = 'mean')
print(array2) # [ 6 1 3 5 9 11 6]
# pad array with the median value from the whole array
array3 = np.pad(array1, pad_width = 1, mode = 'median')
print(array3) # [ 5 1 3 5 9 11 5]
# pad array with the mean value from 3 adjacent edge values
array4 = np.pad(array1, pad_width = 1, mode = 'mean',stat_length = 3)
print(array4) # [ 3 1 3 5 9 11 8]
# pad array with the median value from 3 adjacent edge values
array5 = np.pad(array1, pad_width = 1, mode = 'median',stat_length = 3)
print(array5) # [ 3 1 3 5 9 11 9]
示例 6: 使用 reflect 和 symmetric 模式填充
在numpy.pad()
中,'reflect'
模式通过镜像数组的值来填充输入数组,而'symmetric'
模式通过镜像数组的值(包括边界值)来填充。
它们支持一个额外的参数reflect_type
。
reflect_type
可以是even
或odd
even
(默认): 填充是使用镜像值完成的odd
: 填充镜像值是通过使用2 * 边缘值 - 镜像值完成的
import numpy as np
# create a 1D array
array1 = np.array([1, 3, 5, 9, 11])
# pad the array using reflect mode and even reflect_type
array2 = np.pad(array1, pad_width=2, mode='reflect')
# pad the array using reflect mode and odd reflect_type
array3 = np.pad(array1, pad_width=2, mode='reflect', reflect_type='odd')
# pad the array using symmetric mode and even reflect_type
array4 = np.pad(array1, pad_width=2, mode='symmetric', reflect_type='even')
# pad the array using symmetric mode and odd reflect_type
array5 = np.pad(array1, pad_width=2, mode='symmetric', reflect_type='odd')
print("Array padded with reflect mode and even reflect_type:\n", array2)
print("Array padded with reflect mode and odd reflect_type:\n", array3)
print("Array padded with symmetric mode and even reflect_type:\n", array4)
print("Array padded with symmetric mode and odd reflect_type:\n", array5)
输出
Array padded with reflect mode and even reflect_type: [ 5 3 1 3 5 9 11 9 5] Array padded with reflect mode and odd reflect_type: [-3 -1 1 3 5 9 11 13 17] Array padded with symmetric mode and even reflect_type: [ 3 1 1 3 5 9 11 11 9] Array padded with symmetric mode and odd reflect_type: [-1 1 1 3 5 9 11 11 13]
示例 7: 使用 'wrap' 模式填充
在numpy.pad()
中,'wrap'
模式用数组的循环包装来填充数组。它不支持任何额外的参数。
import numpy as np
# create a 1D array
array1 = np.array([1, 2, 3, 4])
# pad the array using wrap mode, which wraps the array values around cyclically
array2 = np.pad(array1, pad_width=1, mode='wrap')
# pad the array with wider padding using wrap mode
array3 = np.pad(array1, pad_width=2, mode='wrap')
print("Array padded with wrap mode:\n", array2)
print("Array padded with wrap mode and wider padding:\n", array3)
输出
Array padded with wrap mode: [4 1 2 3 4 1] Array padded with wrap mode and wider padding: [3 4 1 2 3 4 1 2]
示例 8: 使用 'empty' 模式填充
在numpy.pad()
中,'empty'
模式使用未初始化值填充输入数组。它不支持任何额外的参数。
import numpy as np
# create a 1D array
array1 = np.array([1, 2, 3, 4])
# pad the array using empty mode, which pads with empty values
array2 = np.pad(array1, pad_width=1, mode='empty')
print("Array padded with empty mode:\n", array2)
输出
Array padded with empty mode: [ 4253 1 2 3 4 723435939191610164]
注意:用于填充的数字不是随机的,它们是未初始化/垃圾值。
使用自定义填充函数作为模式
你可以定义一个自定义的填充函数来填充数组。它具有以下签名
padding_func(vector, iaxis_pad_width, iaxis, kwargs)
其中
vector
: 一个用零填充的秩 1 数组iaxis_pad_width
: 一个包含 2 个元素的元组iaxis_pad_width[0]
是在 vector 的开头填充的值的数量iaxis_pad_width[1]
是在 vector 的末尾填充的值的数量
iaxis
: 当前正在计算的轴kwargs
: 函数所需的任何关键字参数
例如,
import numpy as np
# custom padding function
def custom_padding(arr, pad_width, iaxis,kwargs):
#pad with 2 before the array
arr[:pad_width[0]] = 2
#pad with 3 after the array
arr[-pad_width[1]:] = 3
# create a 1D array
array1 = np.array([1, 2, 3, 4])
# pad the array using the custom padding function as the mode
padded_array = np.pad(array1, 2, custom_padding)
print("Original Array:\n", array1)
print("Padded Array using Custom Padding Function as Mode:\n", padded_array)
输出
Original Array: [1 2 3 4] Padded Array using Custom Padding Function as Mode: [2 2 1 2 3 4 3 3]