要同时裁剪具有窗口大小的NumPy数组的每个元素,可以使用NumPy的高级索引和广播功能。以下是一个示例代码,展示了如何实现这一点:
假设我们有一个形状为 (height, width)
的二维NumPy数组 arr
,并且我们希望使用一个大小为 (window_height, window_width)
的窗口来裁剪每个元素。
import numpy as np
def crop_array(arr, window_size):
height, width = arr.shape
window_height, window_width = window_size
# 计算裁剪的起始位置
start_row = (height - window_height) // 2
start_col = (width - window_width) // 2
# 使用高级索引进行裁剪
cropped_arr = arr[start_row:start_row + window_height, start_col:start_col + window_width]
return cropped_arr
# 示例用法
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
window_size = (2, 2)
cropped_arr = crop_array(arr, window_size)
print(cropped_arr)
def crop_array_safe(arr, window_size):
height, width = arr.shape
window_height, window_width = window_size
if window_height > height or window_width > width:
raise ValueError("Window size exceeds array dimensions")
start_row = (height - window_height) // 2
start_col = (width - window_width) // 2
cropped_arr = arr[start_row:start_row + window_height, start_col:start_col + window_width]
return cropped_arr
通过这种方式,可以确保在裁剪过程中不会出现索引错误,从而提高代码的健壮性。
领取专属 10元无门槛券
手把手带您无忧上云