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都提供了灵活的技术来实现这一点,可以根据具体需求进行自定义。