У мене досить великий клас функціональних класів у базі даних геоданих (~ 4 000 000 записів). Це звичайна сітка точок з роздільною здатністю 100 м.
Мені потрібно виконати своєрідне узагальнення на цьому шарі. Для цього я створюю нову сітку, де кожна точка лежить посередині 4 "старих" точок:
* * * *
o o o
* * * *
o o o
* * * *
[*] = точка вихідної сітки - [о] = точка нової сітки
Значення атрибута кожної нової точки обчислюється на основі зважених значень 4-х сусідів у старій сітці. Таким чином, я петлю на всіх точках моєї нової сітки і, для кожної з них, я петлю на всі точки моєї старої сітки, щоб знайти сусідів (порівнюючи значення X і Y в таблиці атрибутів). Як тільки 4 сусідки знайдені, ми виходимо з петлі.
Тут немає ніякої методологічної складності, але моя проблема полягає в тому, що на основі моїх перших тестів цей сценарій буде тривати тижнями, щоб завершити ...
Чи бачите ви можливість зробити це більш ефективним? Кілька ідей на моїй голові:
- Індексуйте поля X і Y => Я це зробив, але не помітив суттєвих змін у продуктивності
- Зробіть просторовий запит, щоб знайти сусідів, а не на основі атрибутів. Це б насправді допомогло? Яка просторова функція в ArcGIS повинна виконувати цю роботу? Я сумніваюся, що, наприклад, буферизація кожної нової точки виявиться більш ефективною
- Перетворіть клас функції в масив NumPy. Чи допомогло б це? Я до цього часу не працював багато з NumPy, і я не хотів би занурюватися в нього, якщо хтось не скаже мені, що це дійсно може допомогти скоротити час обробки
- Ще щось?