Tengo un dataset ráster en formato ASCII. Usando Python, necesito determinar los valores min
y max
dentro del conjunto de datos. Me han dicho que la información del encabezado es clave, que contiene elementos como el número de filas / columnas, el tamaño de la celda, etc.
¿No puede simplemente omitir la información del encabezado y leer todo el conjunto de datos para determinar los valores min
y max
?
Esto es lo que estoy tratando de hacer. Estoy omitiendo el primer par de líneas que contienen la información del encabezado e intento determinar los valores a partir de ahí. Lo siguiente es algo de lo que tengo, pero necesito alguna orientación ya que soy nuevo en Python.
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
¿Alguna sugerencia?
python
statistics
esri-ascii-raster
kaoscify
fuente
fuente
Respuestas:
Puedes usar numpy. Vea el ejemplo a continuación. Se puede generar una matriz enmascarada numpy teniendo en cuenta los valores sin datos. Consulte el tema de ayuda numpy para mafromtxt y genfromtxt
a partir de ahí, simplemente es cuestión de determinar las estadísticas que desea
fuente
Desea estadísticas de datos ráster.
Vea lo que está haciendo en la interfaz gráfica de usuario primero (para la tarea).
Luego puede usar una ventana de Python o un script .
fuente
fuente
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
realidad no funciona cuando se trata de especificar el rango. Arregle el error que estaba teniendo en el comentario anterior. Esto se hizo agregandonum = data[7]
en la tercera línea. Luego se dividió usandovalues = num.split()
y pudo encontrar el máximo / mínimo, pero solo para esa línea en particular. ¿Cómo puedo encontrar el máximo / mínimo de todo el documento?if check==True
bloque inicializando sus valores min / max. Deberá inicializar min en sys.float_info.max y max en sys.float_info.min.Si no quieres usar numpy (y realmente deberías, es perfecto para este tipo de cosas), entonces necesitarás:
maximum
variable a un número negativo muy grande y suminimum
variable a un número positivo muy grandemaximum = max(maximum, max(myfloatlist))
y un equivalente para el valor mínimo.fuente
Acabo de hacer esto el otro día. Utilicé
arcpy.RasterToNumPyArray
, convertí la matriz numpy en una lista, luego recorrí mi lista a través de una comprensión de la lista para encontrar los valores mínimos y máximos.fuente
myArray.min()
/myArray.max()
más simple / más rápido?