Tengo una clase de entidad de punto bastante grande en una geodatabase de archivos (~ 4 000 000 de registros). Esta es una cuadrícula regular de puntos con una resolución de 100 m.
Necesito realizar una especie de generalización en esta capa. Para esto, creo una nueva cuadrícula donde cada punto se encuentra en el medio de 4 puntos "antiguos":
* * * *
o o o
* * * *
o o o
* * * *
[*] = punto de la cuadrícula original - [o] = punto de la nueva cuadrícula
El valor del atributo de cada nuevo punto se calcula en función de los valores ponderados de sus 4 vecinos en la cuadrícula anterior. Por lo tanto, hago un bucle en todos los puntos de mi nueva cuadrícula y, para cada uno de ellos, hago un bucle en todos los puntos de mi antigua cuadrícula, para encontrar los vecinos (comparando los valores de X e Y en la tabla de atributos). Una vez que se han encontrado 4 vecinos, nos salimos del círculo.
No hay complejidad metodológica aquí, pero mi problema es que, en base a mis primeras pruebas, este script durará semanas para completarse ...
¿Ves alguna posibilidad de hacerlo más eficiente? Algunas ideas en la parte superior de mi cabeza:
- Indice los campos X e Y => Lo hice pero no noté ningún cambio significativo en el rendimiento
- Haga una consulta espacial para encontrar los vecinos en lugar de una basada en atributos. ¿Eso realmente ayudaría? ¿Qué función espacial en ArcGIS debería hacer el trabajo? Dudo que, por ejemplo, amortiguar cada nuevo punto resulte más eficiente
- Transforme la clase de entidad en una matriz NumPy. ¿Eso ayudaría? No he trabajado mucho con NumPy hasta ahora y no me gustaría sumergirme en él a menos que alguien me diga que realmente podría ayudar a reducir el tiempo de procesamiento
- ¿Algo más?