Trabajar con NumPy en ArcGIS

Numerical Python (NumPy) es un paquete fundamental para el cálculo científico en Python, inclusive admitir un objeto de conjunto N dimensional eficaz. NumPy proporciona una avenida para realizar operaciones matemáticas complejas y ha sido parte del software de instalación de ArcGIS desde la versión 9.2. Para más información, vea el sitio Web de NumPyVínculo externo.

Un conjunto Python NumPy está diseñado para manejar conjuntos grandes. Hay muchas funciones de Phyton existentes que fueron creadas para procesar conjuntos NumPy, la mayoría que se han observado están incluidas en el paquete de cálculo científico de SciPy de Python.

Trabajar con datos de entidad y tablas

Las clases de entidad y tabla se pueden convertir a y de los conjuntos NumPy al utilizar las funciones en el módulo de acceso de datos (arcpy.da).

Para convertir conjuntos NumPy a clases de entidad y tablas, los conjuntos deben ser conjuntos estructurados. Los conjuntos estructurados incluyen campos (o estructuras) que se utilizan para representar los datos en el campo en las clases de entidad y tabla de ArcGIS. Para más información sobre conjuntos estructurados, veaConjuntos estructuradosVínculo externo.

Crear un conjunto estructurado NumPy.

import numpy  array = numpy.array([(471316.383, 5000448.782), (470402.493, 5000049.216)],                     numpy.dtype([('X', '>f8'),('Y', '>f8')]))

Una vez lo haya creado, un conjunto estructurado NumPy se puede convertir en una clase de entidad o tabla.

Convertir un conjunto NumPy a una clase de entidad de geodatabase.

import arcpy import numpy  outFC = "C:/data/texas.gdb/fd/pointlocations"  # Create a numpy array with an id field, and a field with a tuple  #  of x,y coordinates # array = numpy.array([(1, (471316.3835861763, 5000448.782036674)),                      (2, (470402.49348005146, 5000049.216449278))],                     numpy.dtype([('idfield',numpy.int32),('XY', '<f8', 2)]))  # Define a spatial reference for the output feature class # SR = arcpy.Describe("C:/data/texas.gdb/fd").spatialReference  # Export the numpy array to a feature class using the XY field to #  represent the output point feature # arcpy.da.NumPyArrayToFeatureClass(array, outFC, ['XY'], SR)
Funciones arcpy.da para trabajar con datos de entidad y tablas

Funciones

Explicación

ExtendTable

Una el contenido de un conjunto estructurado NumPy a una tabla basándose en un campo de atributos común.

FeatureClassToNumPyArray

Convertir una clase de entidad a un conjunto estructurado NumPy.

NumPyArrayToFeatureClass

Convertir un conjunto estructurado NumPy a una clase de entidad.

NumPyArrayToTable

Convertir un conjunto estructurado NumPy a una tabla.

TableToNumPyArray

Convertir una tabla a conjunto estructurado NumPy.

Los campos de enteros en conjuntos NumPy no son compatible con valores nulos. Si los datos que se convirtieron utilizando FeatureClassToNumPyArray o TableToNumPyArray contienen valores nulos, las filas que incluyen los valores nulos se deben omitir totalmente u ocultar con un valor substituto.

Omitir todos los registros que incluyen un valor nulo.

array = da.FeatureClassToNumPyArray(fc, fields, skip_nulls=True)

Máscara Nones en los campos de enteros con valores diferentes utilizando un diccionario.

fields = ['field1', 'field2'] arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=-9999)

Tipo de conversiones

La dtypes del conjunto creado están determinados por el tipo de campo de la tabla de entrada o clase de entidad.

Tipo de campo

NumPy dtype

Simple

numpy.float32

Doble

numpy.float64

SmallInteger

numpy.int32

Entero

numpy.int32

OID

numpy.int32

GUID

<U64

Cadena de caracteres

<u1, <u10, y así sucesivamente

NotaNota:

Los campos de cadena de caracteres convertidos a un conjunto tendrán el mismo ancho. Por ejemplo, un campo de cadena de caracteres con un ancho de 20 tendrá un dtype de <u20.

Otros tipos de campo no mencionados anteriormente, incluida la fecha, ráster y los campos BLOB no son compatibles. Los campos de geometría tampoco no compatibles, pero varias propiedades de geometría se pueden agregar al conjunto mediante las fichas especiales que se enumeran a continuación.

Token

Descripción

SHAPE@XY

Coordenadas x,y centroide de la entidad

SHAPE@TRUECENTROID

Coordenadas x,y centroide verdadero de la entidad

SHAPE@X

Coordenada x de la entidad

SHAPE@Y

Coordenada y de la entidad

SHAPE@Z

Coordenada z de la entidad

SHAPE@M

Valor m de la entidad

SHAPE@AREA

Área de la entidad

SHAPE@LENGTH

Longitud de la entidad

Consideraciones de la memoria

NumPy asigna previamente la memoria cuando se crean conjuntos. Un conjunto que requiere más memoria de la que está disponible fallará con una excepción MemoryError.

Sugerencias para evitar las excepciones MemoryError:

  • Eliminar el conjunto de objetos después de utilizar; eliminar el conjunto liberará la memoria.
  • Utilice sólo los campos que necesita, especialmente campos de texto; un campo de texto convertido a un conjunto consumirá 4 bytes por cada carácter de ancho. Por ejemplo, un campo de cadena de caracteres con un ancho de 100 consumirán 400 bytes de memoria para cada valor en el conjunto.

NumPy dtype

Cantidad de bytes por valor

<U1

4

numpy.int32

4

numpy.float32

4

numpy.float64

8

NotaNota:

numpy. nbytes devuelve un diccionario de dtypes y un número de bytes.

Trabajar con rásteres

El ráster se puede convertir a y desde conjuntos NumPy utilizando las funciones de ArcPy RasterArrayToNumPy y NumPyArrayToRaster. Es posible que desee convertir un ráster de ArcGIS a un conjunto NumPy para:

  1. Implementar una de las distintas funciones Python existentes que se pueden aplicar a un conjunto NumPy (por ejemplo, ejecutar filtros en los datos, realizar un análisis multidimensional o utilizar rutinas de optimización).
  2. Desarrollar una función personalizada al obtener acceso a las celdas individuales dentro el conjunto NumPy (por ejemplo, para implementar notaciones de vecindad, cambiar valores de celdas individuales o ejecutar operadores acumulativos en un ráster completo).

Funciones arcpy para trabajar con rásteres

Funciones

Explicación

RasterToNumPyArray

Convertir un ráster en un conjunto NumPy.

NumPyArrayToRaster

Convierte un conjunto NumPy en un ráster.

Un ráster se convierte en un conjunto NumPy para calcular el porcentaje del valor de la celda en la fila completa del ráster. Se crea entonces un nuevo ráster.

import arcpy import numpy   myArray = arcpy.RasterToNumPyArray('C:/data/inRaster') myArraySum = myArray.sum(1) myArraySum.shape = (myArray.shape[0],1) myArrayPerc = (myArray * 1.0)/ myArraySum  newRaster = arcpy.NumPyArrayToRaster(myArrayPerc) newRaster.save("C:/output/fgdb.gdb/PercentRaster")
9/11/2013