Ich habe vier ziemlich große RasterStacks und möchte einige einfache Berechnungen an ihnen vornehmen. Wie kann ich diese Berechnungen beschleunigen? Ich habe this approach using overlay() gefunden, aber die Berechnungen dauern immer noch sehr lange.Wie beschleunigt man Berechnungen mit riesigen Rasterstapeln?
Mein RasterStacks (s1, s2, s3, s4) haben alle Dimensionen: 26, 76, 1976, 3805 (nrow, ncol, ncell, nlayers)
und meine aktuellen Code sieht wie folgt aus:
out <- overlay(s1,s2,s3,s4, fun = function(rs1,rs2,rs3,rs4) {return((rs1+rs2-rs3-rs4)*1e3)})
Irgendwelche Ideen?
EDIT: ein RasterStack zu erzeugen (zB s1) können Sie die folgende Funktion aufrufen:
create_stack <- function(num.col,num.row,num.lay){
r <- raster(matrix(runif(num.row*num.col,0,10), ncol=num.col, nrow=num.row),
xmn=0, xmx=num.col, ymn=0, ymx=num.row)
ll <- replicate(num.lay , r)
return(stack(ll))
}
library(raster)
s1 <- create_stack(76,26,3805)
Bitte geben Sie ein [reproduzierbar] (http://stackoverflow.com/q/5963269/3250126) Beispiel. – loki
Sie können versuchen, Ihre RasterStacks mit dem 'ff'-Paket in ein großes dreidimensionales Array zu konvertieren und dann stattdessen Ihre Berechnung durchzuführen. Das ff-Paket ist effizienter für Berechnungen, aber die Übertragung von 'raster' nach' ff' zurück nach 'raster' kann auch einige Zeit in Anspruch nehmen. – Bastien