¿La forma más rápida de contar el número de entidades en una clase de entidad?

33

Con la introducción del módulo de acceso a datos en arcpy (cursores de búsqueda 30 veces más rápidos), quiero saber si contar las características que coinciden con los criterios de SQL es más rápido que la metodología tradicional MakeTableView + GetCount.

    
pregunta Michael Markieta 23.07.2012 - 20:52

1 respuesta

44

Estoy usando un ejemplo con 1 millón de puntos generados aleatoriamente dentro de una base de datos de archivos. Adjunto aquí .

Aquí hay un código para comenzar:

import time
import arcpy

arcpy.env.workspace = "C:\CountTest.gdb"

time.sleep(5) # Let the cpu/ram calm before proceeding!

"""Method 1"""
StartTime = time.clock()
with arcpy.da.SearchCursor("RandomPoints", ["OBJECTID"]) as cursor:
    rows = {row[0] for row in cursor}

count = 0
for row in rows:
    count += 1

EndTime = time.clock()
print "Finished in %s seconds" % (EndTime - StartTime)
print "%s features" % count

time.sleep(5) # Let the cpu/ram calm before proceeding!

"""Method 2"""
StartTime2 = time.clock()
arcpy.MakeTableView_management("RandomPoints", "myTableView")
count = int(arcpy.GetCount_management("myTableView").getOutput(0))

EndTime2 = time.clock()
print "Finished in %s seconds" % (EndTime2 - StartTime2)
print "%s features" % count

Y algunos resultados iniciales:

>>> 
Finished in 6.75540050237 seconds
1000000 features
Finished in 0.801474780332 seconds
1000000 features
>>> =============================== RESTART ===============================
>>> 
Finished in 6.56968596918 seconds
1000000 features
Finished in 0.812731769756 seconds
1000000 features
>>> =============================== RESTART ===============================
>>> 
Finished in 6.58207512487 seconds
1000000 features
Finished in 0.841122157314 seconds
1000000 features

Imagina conjuntos de datos más grandes y complejos. El SearchCursor se arrastrará indefinidamente.

No estoy en absoluto insatisfecho con los resultados, sin embargo, el módulo DataAccess se está utilizando ampliamente en nuestro círculo de desarrollo de SIG. Busco reconstruir algunas de nuestras definiciones de funciones con este módulo, ya que es más flexible que la metodología MakeTableView + GetCount.

    
respondido por el Michael Markieta 23.07.2012 - 20:52

Lea otras preguntas en las etiquetas