##### `np.pad(array, pad_width, mode='constant', **kwargs)`
**功能简介:**
- 用于在数组的边缘填充值,以扩展数组的尺寸。
**参数说明:**
- `array`:输入的数组,将在其边缘进行填充。
- `pad_width`:指定每个轴边缘的填充宽度,可以是一个整数、一个表示两个边缘的整数元组,或者表示每个轴两个边缘的元组的元组。
- `mode`:填充模式,用于指定填充值的生成方式。默认为 `'constant'`。
- `**kwargs`:其他关键字参数,用于指定特定填充模式的参数。`'constant'` 需要指定 `constant_values`
**返回值:**
- 返回一个填充后的新数组,原数组不会被修改。
**用法实例:**
1. **使用常数填充:**
```python
import numpy as np
arr = np.array([[1, 2], [3, 4]])
pad_width = 1
padded_arr = np.pad(arr, pad_width, mode='constant')
print(padded_arr)
# 输出:
# [[0 0 0 0]
# [0 1 2 0]
# [0 3 4 0]
# [0 0 0 0]]
```
2. **使用自定义填充值和填充模式:**
```python
import numpy as np
arr = np.array([[1, 2], [3, 4]])
pad_width = ((1, 2), (2, 1)) # 指定每个轴的填充宽度
fill_value = 9
padded_arr = np.pad(arr, pad_width, mode='constant', constant_values=fill_value)
print(padded_arr)
# 输出:
# [[9 9 9 9 9]
# [9 1 2 9 9]
# [9 3 4 9 9]
# [9 9 9 9 9]]
```
**`mode` 参数:**
- `mode` 参数用于指定填充模式,即在哪种方式下生成填充值。以下是可用的填充模式及其含义:
1. **'constant'(默认):**
在边缘填充指定的常数值。使用 `constant_values` 参数指定填充值。
2. **'edge':**
使用数组的边缘值来填充。
3. **'linear_ramp':**
根据边缘的线性斜率,从边缘值开始线性增加或减少填充值。
4. **'maximum' 和 'minimum':**
在填充宽度范围内使用数组边缘的最大值或最小值填充。
5. **'mean':**
使用数组边缘的均值来填充。
6. **'median':**
使用数组边缘的中值来填充。
7. **'reflect':**
对数组边缘进行反射,并使用反射后的值填充。
8. **'symmetric':**
对数组边缘进行对称扩展,并使用对称值填充。
9. **'wrap':**
将数组视为环形,使用循环中的值填充。
**用法示例:**
```python
import numpy as np
arr = np.array([[1, 2], [3, 4]])
pad_width = 1
# 使用不同填充模式
padded_constant = np.pad(arr, pad_width, mode='constant', constant_values=0)
padded_edge = np.pad(arr, pad_width, mode='edge')
padded_symmetric = np.pad(arr, pad_width, mode='symmetric')
print("Constant mode:\n", padded_constant)
print("Edge mode:\n", padded_edge)
print("Symmetric mode:\n", padded_symmetric)
# Constant mode:
# [[0 0 0 0]
# [0 1 2 0]
# [0 3 4 0]
# [0 0 0 0]]
# Edge mode:
# [[1 1 2 2]
# [1 1 2 2]
# [3 3 4 4]
# [3 3 4 4]]
# Symmetric mode:
# [[1 1 2 2]
# [1 1 2 2]
# [3 3 4 4]
# [3 3 4 4]]
```