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