如何為 NumPy 陣列新增邊框?


在各種應用中,例如影像處理或資料視覺化,為 NumPy 陣列新增邊框可能是一個有用的操作。NumPy 是一個流行的用於數值計算的 Python 庫,它提供了一個強大的陣列物件來處理多維資料。但是,為 NumPy 陣列新增邊框的過程對於初學者來說可能具有挑戰性。

在本文中,我們將討論如何使用 NumPy 提供的不同技術和函式為 NumPy 陣列新增邊框。我們還將提供示例來演示每種方法的實現。

如何為 NumPy 陣列新增邊框?

NumPy 中有多種技術可用於為 NumPy 陣列新增邊框。以下三種方法是常用的:

方法 1:用零填充

在這種方法中,我們透過在原始陣列周圍附加或新增零的行和列來生成一個更大的陣列。邊界的幅度確定要附加的行和列的數量。NumPy 提供的 numpy.pad() 函式可用於透過指定首選邊界大小和填充方法來執行此過程。

方法 2:用常量值填充

與用零填充類似,此方法涉及新增常量值的邊界而不是零。numpy.pad() 函式使我們能夠指定要用於填充的常量值。

使用常量值在 NumPy 陣列周圍新增邊框的方法包括確定包含邊框的新陣列的尺寸。然後,我們使用 numpy.pad() 函式並指定填充寬度並將模式指定為“constant”以用常量值填充陣列。此外,我們可以選擇要使用的特定常量值。numpy.pad() 函式生成一個具有指定尺寸的新陣列,並且填充區域用常量值填充。

方法 3:連線

在這種方法中,我們透過將原始陣列與所有側面的其他行和列連線起來來生成一個更大的陣列。NumPy 的 numpy.concatenate() 函式用於將原始陣列與所需數量的行和列組合。

最初,我們生成用零填充的不同陣列,分別表示頂部、底部、左側和右側邊框。這些陣列具有所需的尺寸。隨後,我們利用 numpy.concatenate() 函式將這些邊框陣列與原始數組合並。因此,形成了一個新的陣列,其中包含由新新增的邊框包圍的原始陣列。此技術提供了一種方便的方法來增加陣列的尺寸,同時保留其現有資料。

這些方法在為 NumPy 陣列新增不同幅度和值的邊框方面提供了靈活性,允許根據特定需求進行自定義。

以下是顯示如何使用所有三種方法為 NumPy 陣列新增邊框的程式:

示例

import numpy as np

#function for adding border using Zero-padding method:
def add_border_zero_padding(arr, border_width):
   height, width = arr.shape
   new_height = height + 2 * border_width
   new_width = width + 2 * border_width

   new_arr = np.pad(arr, pad_width=border_width, mode='constant')

   return new_arr

#function for adding border using Constant-padding method:
def add_border_constant_padding(arr, border_width, constant_value):
   height, width = arr.shape
   new_height = height + 2 * border_width
   new_width = width + 2 * border_width

   new_arr = np.pad(arr, pad_width=border_width, mode='constant', constant_values=constant_value)

   return new_arr

#function for adding border using concatenation method:
def add_border_concatenation(arr, border_width):
   height, width = arr.shape
   new_height = height + 2 * border_width
   new_width = width + 2 * border_width

   top_border = np.zeros((border_width, width), dtype=arr.dtype)
   bottom_border = np.zeros((border_width, width), dtype=arr.dtype)
   left_border = np.zeros((new_height, border_width), dtype=arr.dtype)
   right_border = np.zeros((new_height, border_width), dtype=arr.dtype)

   new_arr = np.concatenate((top_border, arr, bottom_border), axis=0)
   new_arr = np.concatenate((left_border, new_arr, right_border), axis=1)

   return new_arr

# Example usage
original_array = np.array([[1, 2, 3], [4, 5, 6],  [7, 8, 9]])

border_width = 1
constant_value = 99

bordered_array_zero_padding = add_border_zero_padding(original_array, border_width)
bordered_array_constant_padding = add_border_constant_padding(original_array, border_width, constant_value)
bordered_array_concatenation = add_border_concatenation(original_array, border_width)
print("Original Array:")
print(original_array)
print("\nBorder using Zero Padding:")
print(bordered_array_zero_padding)
print("\nBorder using Constant Padding:")
print(bordered_array_constant_padding)
print("\nBorder using Concatenation:")
print(bordered_array_concatenation)

輸出

C:\Users\Tutorialspoint>python image.py
Original Array:
[[1 2 3]
 [4 5 6]
 [7 8 9]]

Border using Zero Padding:
[[0 0 0 0 0]
 [0 1 2 3 0]
 [0 4 5 6 0]
 [0 7 8 9 0]
 [0 0 0 0 0]]

Border using Constant Padding:
[[99 99 99 99 99]
 [99  1  2  3 99]
 [99  4  5  6 99]
 [99  7  8  9 99]
 [99 99 99 99 99]]

Border using Concatenation:
[[0 0 0 0 0]
 [0 1 2 3 0]
 [0 4 5 6 0]
 [0 7 8 9 0]
 [0 0 0 0 0]]

結論

總之,為 NumPy 陣列新增邊框提供了一種有用的方法來擴充套件其尺寸以用於各種應用。無論是使用零填充、常量填充還是連線,NumPy 都提供了通用的技術來實現這一點,允許根據特定需求進行自定義。

更新於:2023-07-24

820 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告