Эффективная статистика движущегося окна для матричных и / или пространственных данных (статистика окрестностей) в R - PullRequest
4 голосов
/ 12 августа 2011

Я использую растр и связанные с ним пакеты в R, чтобы выполнить небольшую работу по дистанционному зондированию. Для ряда функций, которые я пишу, я бы хотел быстро вычислить статистику соседства / перемещения окна. К сожалению, любые реализации R, которые я или другие пишут, очень и очень медленные.

Я знаю, что пакет caTools предлагает эту функциональность, написанную на C для векторов / временных рядов, что дает 10-кратную экономию времени. Кто-нибудь знаком с подобным пакетом или функцией, которая обеспечивает эту функциональность для матриц и пространственных данных?

Быстрый пример:

# Generate a raster with random values
r <- raster(nrows=100, ncols=100)
values(r) <- rbinom(dim(r)[1] * dim(r)[2], 1, 0.1)

# Now generate a raster highlighting the original values plus immediate neighbors
# (By default ngb yields a queen-esque weighting system)
r.neighbor <- focal(r, ngb=3, fun=max)

# system.time() of the above function for a 100x100 raster takes 0.8 seconds on my laptop
# and takes over 15 seconds for a 1000x1000 raster

В идеале, я бы хотел сделать это быстрее и для гораздо больших растров.

Большое спасибо, Ник

Ps. Здесь есть интересное обсуждение огромных различий в скорости R-функций для выполнения операций с движущимся окном над векторами: http://tolstoy.newcastle.edu.au/R/help/04/10/5161.html

...