Я знаю, что есть несколько более простых способов сделать это, но для меня это самый простой. Я создал следующую функцию для выполнения этой задачи, которая принимает два аргумента:
arr
: массив 2D numpy. zone_size
: размер квадратная зона.
И функция выглядит так:
def get_heighest_zone(arr, zone_size):
max_sum = float("-inf")
row_idx, col_idx = 0, 0
for row in range(arr.shape[0]-zone_size):
for col in range(arr.shape[1]-zone_size):
curr_sum = np.sum(arr[row:row+zone_size, col:col+zone_size])
if curr_sum > max_sum:
row_idx, col_idx = row, col
max_sum = curr_sum
return arr[row_idx:row_idx+zone_size, col_idx:col_idx+zone_size]
Предполагая, что arr
- это массив numpy, указанный в вашем вопросе, применяя эту функцию к другим zone_size
s вернет следующие значения:
>>> get_heighest_zone(arr, 2)
[[70.03 64.39]
[69.39 66.7 ]]
>>> get_heighest_zone(arr, 3)
[[53.86 70.03 64.39]
[68.35 69.39 66.7 ]
[55.11 32.3 29.47]]
>>> get_heighest_zone(arr, 4)
[[ 14.18 53.86 70.03 64.39]
[ 33.71 68.35 69.39 66.7 ]
[103.72 55.11 32.3 29.47]
[ 59.02 18.6 37.53 24.5 ]]
Если zone_size
не обязательно должно быть квадратным, вам нужно будет немного изменить код. Также следует утверждать, что zone_size
меньше размера массива.
Надеюсь, это именно то, что вы искали!