Я использую цикл 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)
Я не могу понять, почему было бы намного медленнее работать на том же процессе. Любые мысли / идеи будут с благодарностью!