Я новичок в python кодировании, моя основная сфера деятельности - наука о Земле. У меня есть огромная база данных (миллион точек), которая содержит координаты (x, y), выраженные в UTM (это не критично для описываемой проблемы), которые представляют центр окружностей с радиусом r. Я хотел бы уменьшить количество этих точек на основе порогового значения, которое выражается через несколько радиусов (например, 1 * r / 2 * r / 3.5 * r, et c.); Точки, которые будут ближе, чем порог, должны быть отклонены из списка точек. Я хотел бы создать новый канал маски, который будет показывать 1 для принятых точек и 0 для отклоненных точек, а также отображать результаты в виде кругов (точек в качестве центра) с радиусом r как исходного набора точек, так и новых принятых точек каналов в разные цвета на графике (помечены ось / заголовок / сводная легенда). Перед началом обработки данные точек должны быть отсортированы в порядке возрастания. Я хотел бы иметь возможность экспортировать график в виде изображений и карт PDF. #
Элемент списка
- данные будут выглядеть примерно так:
- xy_data =
- [[687690., 992340 .],
- [687720., 992340.],
- [693210., 993000.],
- [693420., 999420.],
- [693450., 999420.],
- [693480., 999420.],
- [693540., 999210.],
- [693570., 999210.] ,
- [693840., 999870.],
- [693870., 999870.],
- [693900., 999870.],
- [ 694200., 1000530.],
- [694230., 1000530.],
- [694260., 1000530.],
- [694890., 999240.]]
- ...
- ...
- ...
пожалуйста, посмотрите внизу, что я пытался что по мне плохой способ кодирования. Пожалуйста, предложите лучший python способ выполнения sh этой задачи.
Заранее благодарим вас за вашу помощь и помощь (пожалуйста, предоставьте объяснение для каждого шага и не стесняйтесь предлагать чтения, которые помогут в понимании часть программирования)
import numpy as np
from scipy.spatial import distance
from scipy.spatial.distance import cdist
r = 100.
k = 0
N = xy_data[:].shape[0] # xy_data is input data as shown above
dist_tol = 3*r
Mask = np.ones(N)
sep = np.ones(N) # points separation
point_dist3 = np.ones(N).reshape(1,N)
for i in np.arange(k,N - 1,1):
if i == 0 :
point_dist3[:,i] = 0.
sep[i] = 0.
Mask[i] = 1.
for j in np.arange(i+1,N,1):
print('i: ',i, '\tj: ',j, '\tk: ', k)
sep[j] = cdist(xy_data[i:i+1], xy_data[j:j+1])
if sep[j] <= dist_tol: #if point_dist2[:,i] <= dist_tol:
Mask[j] = 0
k = j
else:
continue