Arcpy, Berechnung von Rastern in for-Schleife
Verfasst: Sonntag 11. Januar 2015, 21:58
Hallo.
Ich habe ein Raster (AusgZust) mit Höhenwerten des Ostsee-Gebietes vor der postglazialen Hebung der Skanden (d. h. 10.000 BP). Für den Zeitraum der folgenden 5000 Jahre nehme ich eine exponentiell abnehmende Hebungsrate an, d.h. der Hebungsbetrag im Jahr a beträgt h_max * Exp(r*a). Dieser muss dann immer auf die Höhenwerte des vorangegangenen Jahres (a-1) addiert werden.
Um die Hebung darzustellen, würde ich gerne mindestens 10 Zeitschritte (zwischen 10.000 und 5.000 BP bzw. zwischen 0 und 5000) berechnen. Da ich eine rekursive Gleichung habe, mache ich das mit einer for-Schleife:
Das funktioniert zwar, das Problem ist nur, dass das eeewig viel (Arbeits-)speicher braucht, weil ich so 5000 Raster berechne, von denen ich eigentlich nur 10 brauche.
Meine Idee war deshalb, vor den Speicherbefehl eine if-Schleife zu setzen, damit nur bestimmte Zeitschritte abgespeichert werden, z.B.
Das funktioniert aber leider nicht...
Hat jemand eine Idee, wie ich das lösen kann?
Ich habe ein Raster (AusgZust) mit Höhenwerten des Ostsee-Gebietes vor der postglazialen Hebung der Skanden (d. h. 10.000 BP). Für den Zeitraum der folgenden 5000 Jahre nehme ich eine exponentiell abnehmende Hebungsrate an, d.h. der Hebungsbetrag im Jahr a beträgt h_max * Exp(r*a). Dieser muss dann immer auf die Höhenwerte des vorangegangenen Jahres (a-1) addiert werden.
Um die Hebung darzustellen, würde ich gerne mindestens 10 Zeitschritte (zwischen 10.000 und 5.000 BP bzw. zwischen 0 und 5000) berechnen. Da ich eine rekursive Gleichung habe, mache ich das mit einer for-Schleife:
Code: Alles auswählen
import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "..."
Zielordner = "..."
AusgZust = Raster(Zielordner+"RasterCalc_Ausgangszustand")
Hebung_max = Raster(Zielordner+"Hebungsrate_max")
r = -0.000766147
Zeit = range(0,5000)
for a in Zeit:
outRaster = AusgZust + Hebung_max * Exp(r*a)
outRaster.save(Zielordner+"Zustand_vor_"+str(10000-a)+"_Jahren")
AusgZust = Raster(Zielordner+"Zustand_vor_"+str(10000-a)+"_Jahren")Meine Idee war deshalb, vor den Speicherbefehl eine if-Schleife zu setzen, damit nur bestimmte Zeitschritte abgespeichert werden, z.B.
Code: Alles auswählen
for a in Zeit:
outRaster = AusgZust + Hebung_max * Exp(r*a)
if a%500 == 0: outRaster.save(Zielordner+"Zustand_vor_"+str(10000-a)+"_Jahren")
AusgZust = outRasterHat jemand eine Idee, wie ich das lösen kann?