В 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,

В частности, я хотел бы:

  1. Подсчитайте количество регионов, которые превышают threshold value;
  2. Определить их 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)

Если вы видите значение ниже порогового значения как отсутствующее значение, вы можете сначала интерполировать это отсутствующее значение.

Другие вопросы по тегам