Mam dość dużą klasę obiektów punktowych w geobazie pliku (~ 4 000 000 rekordów). Jest to regularna siatka punktów o rozdzielczości 100 m.
Muszę wykonać rodzaj uogólnienia na tej warstwie. W tym celu tworzę nową siatkę, w której każdy punkt znajduje się w środku 4 „starych” punktów:
* * * *
o o o
* * * *
o o o
* * * *
[*] = punkt oryginalnej siatki - [o] = punkt nowej siatki
Wartość atrybutu każdego nowego punktu jest obliczana na podstawie ważonych wartości 4 sąsiadów w starej siatce. Zapętlam więc wszystkie punkty mojej nowej siatki i dla każdego z nich zapętlam wszystkie punkty mojej starej siatki, aby znaleźć sąsiadów (porównując wartości X i Y w tabeli atrybutów). Po znalezieniu 4 sąsiadów wychodzimy z pętli.
Nie ma tu złożoności metodologicznej, ale moim problemem jest to, że na podstawie moich pierwszych testów skrypt ten będzie trwał kilka tygodni, aby ukończyć ...
Czy widzisz jakąś możliwość zwiększenia wydajności? Kilka pomysłów na czubku głowy:
- Zindeksuj pola X i Y => Zrobiłem to, ale nie zauważyłem żadnej znaczącej zmiany wydajności
- Wykonaj zapytanie przestrzenne, aby znaleźć sąsiadów, a nie oparte na atrybutach. Czy to naprawdę pomogłoby? Jaka funkcja przestrzenna w ArcGIS powinna działać? Wątpię, aby np. Buforowanie każdego nowego punktu okazało się bardziej wydajne
- Przekształć klasę obiektów w tablicę NumPy. Czy to pomogłoby? Do tej pory nie pracowałem dużo z NumPy i nie chciałbym się w to zanurzyć, chyba że ktoś mi powie, że może to naprawdę pomóc w skróceniu czasu przetwarzania
- Coś jeszcze?