В Python: центр масс определенных областей значений в двумерном массиве
Я работаю с серией numpy.ndarray
сделаны из значений 101x101 в диапазоне от 0,0 до 1,0. Все массивы выглядят так:
array([[ 0.216, 0.24 , 0.244, ..., 0.679, 0.684, 0.707],
[ 0.23 , 0.229, 0.238, ..., 0.675, 0.676, 0.695],
[ 0.221, 0.238, 0.24 , ..., 0.669, 0.677, 0.684],
...,
[ 0.937, 0.925, 0.923, ..., 0.768, 0.754, 0.752],
[ 0.937, 0.929, 0.923, ..., 0.737, 0.735, 0.741],
[ 0.934, 0.932, 0.929, ..., 0.72 , 0.717, 0.728]])
Теперь скажите, что у меня есть threshold value=0.2
: как я могу найти "области" значений внутри матрицы таким образом, чтобы в них превышался порог? В этом случае я бы искал регионы, значения которых >=0.2
,
В частности, я хотел бы:
- Подсчитайте количество регионов, которые превышают
threshold value
; - Определить их
centers of mass
,
Я знаю, что могу вычислить последнее с помощью: ndimage.measurements.center_of_mass()
, но я не вижу, как его можно применить только к "областям" матрицы, а не ко всему.
РЕДАКТИРОВАТЬ
Пожалуйста, учтите, что "регионы", о которых я говорю, имеют неправильную форму.
1 ответ
Подсчет всех значений выше порога thr = 0.2
может быть сделано:
a = np.random.random(size=(100, 100))
above_thr = len(a[a > thr])
print above_thr
Для центра масс это действительно зависит от того, хотите ли вы отбросить все значения ниже вашего порога с чем-то вроде
a[a < thr] = 0
ndimage.measurements.center_of_mass(a)
Если вы видите значение ниже порогового значения как отсутствующее значение, вы можете сначала интерполировать это отсутствующее значение.