Разное время обработки для одной и той же функции - PullRequest
0 голосов
/ 01 мая 2018

Я использую цикл for для создания новой матрицы со средними / максимальными / минимальными значениями, основанной на объединении ячеек 25x25 в старой матрице. Однако для выполнения этого кода на отдельных матрицах требуется разное время, которое должно быть идентичным.

У меня есть 2 растра, называемых A и B (одинаковое разрешение и экстент): A (2317392 элемента, 18,3 Мб) B (2317392 элемента, 17,7 МБ)

Преобразовано в матрицу: Ма (2317392 элемента, 17,7 Мб) Мб (2317392 элемента, 17,7 Мб)

Запуск кода:

maxm <- matrix(nrow=nrow(Ma)/25, ncol=ncol(Ma)/25)
for(i in 1:dim(maxm)[1] {
   for(j in 1:dim(maxm)[2] {
      row <- 25 * (i-1) + 1
      col <- 25 * (j-1) + 1
   maxm[i,j] <- max(A[row:(row + 24), col:(col + 24)])
   }
}

Для «Ма» он работает за 13,25 с

Тот же код, работающий на матрице 'Mb', занимает 13,2 с. Это как я и ожидал.

-----------

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

На этот раз Ma2 (41320312 элементов, 315,2 МБ) и Mb2 (41320312 элементов, 315,2 МБ)

Код, выполняемый на Ma2, занимает 245,84 секунды

Однако код, работающий на Mb2, работает в течение нескольких дней .....

Я смотрел на удаление значений NA, таких как:

maxm[i,j] <- max(A[row:(row + 24), col:(col + 24)], na.rm=TRUE)

Я не могу понять, почему было бы намного медленнее работать на том же процессе. Любые мысли / идеи будут с благодарностью!

...