Я хочу получить среднее значение numy элементов в 2d массиве вокруг выбранной точки с выбранным размером и формой окрестности.
Я сделал пример, чтобы объяснить, что я пытаюсь сделать.Это не работает с большинством входных данных еще из-за проблем формы.Прежде чем я продолжу, есть ли элегантный или встроенный способ сделать это?
import numpy as np
from skimage.morphology import disk
def get_sub_array_about_point(array, point, size):
i1 = point[0]-(size-1)
i2 = point[0]+size
j1 = point[1]-(size-1)
j2 = point[1]+size
return array[i1:i2, j1:j2]
def get_neighborhood_mean(array, point, size, shape):
sub_array = get_sub_array_about_point(test_array, point, size)
"""
array([[10.1, 1.2, 1.3],
[ 2.1, 20.2, 2.3],
[ 3.1, 3.2, 3.3]])
"""
masked_sub_array = np.ma.masked_where(mask==False, sub_array)
masked_sub_array
"""
masked_array(
data=[[--, 1.2, --],
[2.1, 20.2, 2.3],
[--, 3.2, --]],
mask=[[ True, False, True],
[False, False, False],
[ True, False, True]],
fill_value=1e+20)
"""
return masked_sub_array.mean()
"""
5.8
"""
test_array = np.array([[0. , 0.1 , 0.2 , 0.3 ],
[1. , 10.1 , 1.2, 1.3 ],
[2. , 2.1, 20.2, 2.3 ],
[3. , 3.1 , 3.2, 3.3 ]])
mask = disk(1)
"""
array([[0, 1, 0],
[1, 1, 1],
[0, 1, 0]], dtype=uint8)
"""
get_neighborhood_mean(test_array, point=(2,2), size=2, shape=mask)