NumPy 中的填充

Vaibhhav Khetarpal 2023年1月30日
  1. 在 Python 中使用 NumPy.pad() 函数填充 NumPy 数组
  2. 在 Python 中使用 shape() 函数填充 NumPy 数组
NumPy 中的填充

Python 不允许直接使用数组。这就是 NumPy 库的用武之地,它使得在 Python 中处理和操作数组成为可能。

数组可以是任何指定的大小和维度。有时,需要补偿任何特定数组的尺寸,这就是填充派上用场的地方。

简单来说,填充是指在谈论数组时向任何行或列添加无意义的值,通常是零。它被广泛用于补偿缺少的数组或矩阵中的大量行或列。

本教程演示了如何在 Python 中填充 NumPy 数组。例如,我们将在本教程中用零填充给定的 NumPy 数组。

在 Python 中使用 NumPy.pad() 函数填充 NumPy 数组

顾名思义,NumPy.pad() 函数用于对 NumPy 数组执行填充操作。

NumPy.pad() 函数的语法如下。

numpy.pad(array, pad_width, mode="constant", **kwargs)

NumPy.pad() 函数的所有参数已在下面定义,以便于读者理解。

  1. array - 参数指定必须填充的数组。

  2. pad_width - 它指定将添加到所有轴边缘的值的数量。元组用于指定多维数组的宽度。

  3. mode - 一个可选参数指定阵列的模式。

  4. **kwargs - 可以在函数内传递可变关键字长度的参数。提及是可选的,你可以在线阅读有关它的更多信息。

    本文中的示例没有使用此参数。

在这里,我们将举一个多维数组的例子,但同样可以通过稍微调整代码来处理一维数组。

以下代码使用 NumPy.pad() 函数在 Python 中填充 NumPy 数组。

import numpy as np

x = np.array([[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]])
y = np.pad(x, [(0, 1), (0, 1)], mode="constant")
print(y)

上面的代码提供了以下输出。

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

在这里,我们对多维数组执行填充操作以将其维度扩展到我们指定的大小。

在 Python 中使用 shape() 函数填充 NumPy 数组

这是一种间接方法,也能够实现与 NumPy.pad() 函数相同的结果。shape() 函数是 NumPy 库中包含的另一个函数,可以在将此库导入代码后访问。

shape 函数用于确定给定数组或矩阵的维数。

这个方法有点牵强,因为它根据用户的需要创建一个具有所需维度的新空矩阵,然后将原始矩阵插入到新创建的空矩阵中。它实现了相同的结果,但在获得结果的过程中采用了不同的间接路径。

除了 shape() 函数外,此方法还使用 NumPy.zeros() 方法来创建空矩阵。

对于这种方法,我们需要一个参考矩阵,其尺寸满足用户在填充后的目标尺寸的需求,因为我们首先参考创建空矩阵所需的最终尺寸。

以下代码使用 shape() 函数在 Python 中填充 NumPy 数组。

import numpy as np

x = np.array([[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]])
y = np.array(
    [
        [1.0, 1.0, 1.0, 1.0, 1.0],
        [1.0, 1.0, 1.0, 1.0, 1.0],
        [1.0, 1.0, 1.0, 1.0, 1.0],
        [1.0, 1.0, 1.0, 1.0, 1.0],
    ]
)
z = np.zeros(np.shape(y))
z[: x.shape[0], : x.shape[1]] = x
print(z)

上面的代码提供了以下输出。

[[1. 1. 1. 1. 0.]
 [1. 1. 1. 1. 0.]
 [1. 1. 1. 1. 0.]
 [0. 0. 0. 0. 0.]]
Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn