如何为 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 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告