Ich habe ein Raster-Dataset im ASCII-Format. Mit Python muss ich die Werte min
und max
im Dataset ermitteln. Mir wurde gesagt, dass die Kopfzeileninformationen der Schlüssel sind, der Dinge wie Anzahl der Zeilen / Spalten, Zellengröße usw. enthält.
Können Sie nicht einfach die Header-Informationen überspringen und den gesamten Datensatz lesen, um die Werte min
und zu bestimmen max
?
Das versuche ich zu tun. Ich überspringe die ersten Zeilen, die die Header-Informationen enthalten, und versuche von da an, die Werte zu ermitteln. Das Folgende ist eine Art von dem, was ich habe, aber ich brauche eine Anleitung, da ich neu in Python bin.
raster_file = open('data.asc', 'r') # Open the file
data = raster_file.readlines()[4:] # Read the lines in the file, and skip the first six lines
for lines in data:
print max(data) # Find the max value in data
print min(data) # Find hte min value in data
Irgendwelche Vorschläge?
python
statistics
esri-ascii-raster
kaoscify
quelle
quelle
Antworten:
Sie können numpy verwenden. Siehe folgendes Beispiel. Ein numpy maskiertes Array kann unter Berücksichtigung der No-Data-Werte generiert werden. Siehe das Hilfethema zu Numpy für mafromtxt und genfromtxt
Von dort aus müssen Sie lediglich die gewünschten Statistiken ermitteln
quelle
Sie möchten eine Rasterdatenstatistik.
Sehen Sie zuerst, was Sie in der Benutzeroberfläche tun (für Hausaufgaben).
Dann können Sie ein Python-Fenster oder ein Skript verwenden .
quelle
quelle
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
nicht funktioniert, wenn es um die Angabe des Bereichs geht. Ich habe den Fehler behoben, den ich im vorherigen Kommentar hatte. Dies erfolgte durch Hinzufügennum = data[7]
in der 3. Zeile. Es wurde dann mit aufgeteiltvalues = num.split()
und konnte die max / min finden, aber nur für diese bestimmte Zeile. Wie kann ich die maximale / minimale Anzahl aus dem gesamten Dokument ermitteln?if check==True
Block löschen, indem Sie Ihre Min / Max-Werte initialisieren. Sie möchten min auf sys.float_info.max und max auf sys.float_info.min initialisieren.Wenn Sie Numpy nicht verwenden möchten (und das sollten Sie wirklich, es ist perfekt für diese Art von Dingen), dann müssen Sie Folgendes tun:
maximum
Variable mit einer sehr großen negativen Zahl und Ihreminimum
Variable mit einer sehr großen positiven Zahlmaximum = max(maximum, max(myfloatlist))
und ein Äquivalent für den Mindestwert.quelle
Ich habe das neulich getan. Ich habe
arcpy.RasterToNumPyArray
das Numpy-Array verwendet, in eine Liste konvertiert und dann über ein Listenverständnis durch meine Liste iteriert, um die Min- und Max-Werte zu finden.quelle
myArray.min()
/myArray.max()
einfacher / schneller?