Ho una classe caratteristica piuttosto grande in un file geodatabase (~ 4 000 000 record). Questa è una griglia di punti regolare con una risoluzione di 100 m.
Ho bisogno di eseguire una sorta di generalizzazione su questo livello. Per questo, creo una nuova griglia in cui ogni punto si trova nel mezzo di 4 punti "vecchi":
* * * *
o o o
* * * *
o o o
* * * *
[*] = punto della griglia originale - [o] = punto della nuova griglia
Il valore dell'attributo di ogni nuovo punto viene calcolato in base ai valori ponderati dei suoi 4 vicini nella vecchia griglia. In questo modo eseguo il ciclo su tutti i punti della mia nuova griglia e, per ciascuno di essi, eseguo il ciclo su tutti i punti della mia vecchia griglia, al fine di trovare i vicini (confrontando i valori di X e Y nella tabella degli attributi). Una volta trovati 4 vicini, usciamo dal circuito.
Non c'è complessità metodologica qui, ma il mio problema è che, sulla base dei miei primi test, questo script durerà per settimane per completare ...
Vedi qualche possibilità per renderlo più efficiente? Alcune idee in cima alla mia testa:
- Indicizza i campi X e Y => L'ho fatto ma non ho notato cambiamenti significativi nelle prestazioni
- Esegui una query spaziale per trovare i vicini anziché uno basato sugli attributi. Sarebbe davvero d'aiuto? Quale funzione spaziale in ArcGIS dovrebbe svolgere il lavoro? Dubito che, ad esempio, il buffering di ogni nuovo punto si dimostrerà più efficiente
- Trasforma la classe di caratteristiche in un array NumPy. Sarebbe d'aiuto? Finora non ho lavorato molto con NumPy e non mi piacerebbe immergermi a meno che qualcuno non mi dica che potrebbe davvero aiutare a ridurre i tempi di elaborazione
- Qualunque altra cosa?