расчет матрицы co-occurence (совместной встречаемости)

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

расчет матрицы co-occurence (совместной встречаемости)

Сообщение Анна » 05 фев 2010, 12:25

Всем добрый день,

Не приходилось ли кому-то рассчитывать матрицу совместной встречаемости инструментами ГИС?
к примеру, есть таблица к шейпфайлу, где id - это ячейки векторного грида, sp1, sp2, присутвие или отсутствие объета N в этой ячейке:

Код: Выделить всё

id sp1  sp2  sp3  sp4   sp5 ...   spn
1   1    0    1    0     0          1
2   0    0    1    0     0          0
3   0    0    0    1     1          1
4   1    0    1    1     0          0
5   1    0    1    0     1          1
надо перевести в таблицу совместной встречаемости (без привязки к слою! - просто экспортировать в таблицу):

Код: Выделить всё

     sp1  sp2   sp3   sp4  sp5 ... spn
sp1  -     0     3     1    1      2
sp2        -     0     0    0      0     
sp3               -    1    1      2
sp4                      -  1      1
sp5                             -  2 
spn                                -
Заранее спасибо!

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: расчет матрицы co-occurence (совместной встречаемости)

Сообщение KolesovDmitry » 05 фев 2010, 17:18

Анна писал(а): Не приходилось ли кому-то рассчитывать матрицу совместной встречаемости инструментами ГИС?
Если я правильно понял задачу, то она относительно легко решается на основе калькулятора полей:

Код: Выделить всё

(sp_i, sp_j) = Sum(sp_i(k)*sp_j(k))
где (sp_i, sp_j) - значение ячейки (i,j) в таблице встречаемости; sp_i(k) и sp_j(k) - значения колонок sp_i и sp_j в строке k исходной таблицы; сумма берется по всем строкам. Если колонок много или производить эту процедуру придется часто, то можно написать небольшой скрипт, который зацикливает вычисления сумм для всех наборов (i,j).

А обязательно решать задачу средствами ГИС? Мне кажется быстрее и проще написать небольшую утилиту, обрабатывающую dbf-файл и никак не связанную с ГИС (или вообще засунуть все в Exel), чем пытаться все проделать в одном месте.

Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: расчет матрицы co-occurence (совместной встречаемости)

Сообщение Анна » 05 фев 2010, 19:10

Спасибо большое, Дмитрий!
А обязательно решать задачу средствами ГИС? Мне кажется быстрее и проще написать небольшую утилиту, обрабатывающую dbf-файл и никак не связанную с ГИС (или вообще засунуть все в Exel), чем пытаться все проделать в одном месте.
да вот и мне так кажется, просто думала - может упустила чего, поэтому решила для начала посоветоваться.

Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: расчет матрицы co-occurence (совместной встречаемости)

Сообщение Анна » 08 фев 2010, 19:42

все-таки продолжу вопросы:)
а может быть кому-то уже приходилось сталкиваться с такой же задачей в R? и есть какие-то изящные решения с использованием уже существующих функций? без циклов?

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: расчет матрицы co-occurence (совместной встречаемости)

Сообщение Максим Дубинин » 08 фев 2010, 19:46

лови мой вариант (ввод данных примера не очень изящен, не помню точно как лучше):

Код: Выделить всё

x = c(1,0,1,0,0)
x1 = c(0,0,1,0,0)
x2 = c(0,0,0,1,1)
x3 = c(1,0,1,1,0)
x4 = c(1,0,1,0,1)
mat = rbind(x,x1,x2,x3,x4)
crossprod(mat)
> crossprod(data.matrix(mat))
sp1 sp2 sp3 sp4 sp5
sp1 3 0 3 1 1
sp2 0 0 0 0 0
sp3 3 0 4 1 1
sp4 1 0 1 2 1
sp5 1 0 1 1 2
Т.е. решение в одну строку, дальше - дело техники.
пристегивайтесь, турбулентность прямо по курсу

Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: расчет матрицы co-occurence (совместной встречаемости)

Сообщение Анна » 08 фев 2010, 19:50

слов нет. просто супер! вау-вай.

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 3 гостя