1 votos

¿Acceso a valores en SIG basados en la condición utilizando NumPy?

Escribí el siguiente código para el análisis SIG, en el que estoy tratando de encontrar la suma de todos los valores de área de pavimento que cumplen la condición donde Application == "Micro Surface" & CouncilDistrict == 1 .

Tengo más de 85.000 registros en la tabla de atributos con cualquiera de los seis valores diferentes del campo denominado Application y valores de 0 a 10 para CouncilDistrict. Quiero encontrar la suma de los valores para el Pvment_Area que cumplan la condición. Sigo recibiendo el siguiente error:

ValueError: El valor de verdad de un array con más de un elemento es ambiguo. Utilice a.any() o a.all()

¿Cómo extraigo valores utilizando NumPy?

import arcpy
import numpy
input = "C:\Temp\Street1.mdb\Scenario_78M"
arr = arcpy.da.FeatureClassToNumPyArray(input, ('Pvment_Area', 'Application', 'CouncilDistrict'))
x=(arr[arr['Application'] == "Micro Surface" AND ['CouncilDistrict'] == 1]]["Pvment_Area"].sum())
print'Pvment_Area is',x

1voto

user98447 Puntos 18

En and debe expresarse como & . Además, debido a la precedencia de & necesitarás paréntesis. como:

Código:

x=(arr[(arr['Application'] == "Micro Surface") & (['CouncilDistrict'] == 1])]["Pvment_Area"].sum()

Código de prueba:

import numpy as np

data = np.transpose([
    [200.0, 'Micro Surface', 1],
    [100.0, 'Micro Surface', 1],
    [100.0, 'Micro Surface', 0],
    [100.0, 'Not Micro Surface', 1],
    [100.0, 'Not Micro Surface', 0],
])
names = ('Pvment_Area', 'Application', 'CouncilDistrict')
arr = np.core.records.fromarrays(data, names=names, formats='f8, S20, i8')

records = ((arr['Application'] == b"Micro Surface") &
           (arr['CouncilDistrict'] == 1))

area = arr[records]["Pvment_Area"].sum()

print('Pvment_Area is', area)

Resultados:

Pvment_Area is 300.0

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X