NumPy pad()

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 可以是evenodd

  • 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]

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战