Подсчитать внешние ребра соседних ячеек в матрице в R - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над некоторыми данными о температуре в сетке, которые я классифицировал в матрице, где каждая ячейка может быть одним из двух классов - скажем, 0 или 1 для простоты.Для каждого класса я хочу рассчитать статистику патчей, основываясь на FRAGSTATS , который используется в ландшафтной экологии для характеристики формы и размера патчей среды обитания.

Для моих целей патч - это кластер смежных ячеек того же класса.Вот пример матрицы, mat:

mat <- 
matrix(c(0,1,0,
         1,1,1,
         1,0,1), nrow = 3, ncol  = 3, 
       byrow = TRUE)

0    1    0
1    1    1
1    0    1

Все 1 в mat образуют один патч (мы будем игнорировать 0), и для вычисления различных метрик формы мне нужноуметь рассчитать периметр (т.е. количество внешних ребер).

РЕДАКТИРОВАТЬ Извините, я не могу опубликовать изображение, потому что у меня недостаточно репутации, но вы можете увидеть в черных линиях ответа G5W ниже, что внешние границы 1 представляютвнешние края, на которые я ссылаюсь.

Вручную я могу посчитать, что участок 1 с имеет 14 внешних краев, и я знаю, что площадь (т.е. количество ячеек) равна 6. Основано на статье Он и др. и этот другой вопрос Я выяснил, как рассчитать количество внутренних ребер (в данном примере 5), но я действительно изо всех сил пытаюсь сделать то же самое для внешнегокрая!Я думаю, что это как-то связано с тем, как форма патча сравнивается с наибольшим целочисленным квадратом, который имеет меньшую площадь (в данном случае квадрат 2 x 2), но до сих пор мои исследования и размышления были безрезультатными.

NB Мне известен пакет SDMTools, который может рассчитывать различные метрики FRAGSTATS.К сожалению, возвращаемые метрики слишком обработаны, например, вместо просто индекса агрегации, мне нужно знать фактические числа, используемые для его вычисления (количество наблюдаемых общих ребер / максимальное количество общих ребер).

Это мой первый постздесь, так что я надеюсь, что это достаточно подробно!Заранее спасибо:)

1 Ответ

0 голосов
/ 17 мая 2018

Если вы знаете площадь и количество внутренних ребер, то просто рассчитать количество внешних ребер. Каждый патч имеет четыре ребра, так что в любом случае общее количество ребер составляет 4 * области. Но это не совсем правильно, потому что каждое внутреннее ребро разделено между двумя патчами. Таким образом, правильное количество полных ребер равно

4 * площадь - внутри

Количество внешних ребер - это общее ребро за вычетом внутренних ребер, поэтому

снаружи = всего - внутри = (4 * области - внутри) - внутри = 4 * области - 2 * внутри.

Patch

Вы можете видеть, что область состоит из 6 квадратов, каждый из которых имеет 4 стороны. Внутренние края (красные) разделены двумя соседними квадратами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...