У меня есть миллионы xyz-координат из нескольких файлов облака точек, которые я храню внутри двумерного массива numpy: [[x1, y1, z1], [x2, y2, z2],..., [xn, yn, zn]]
.
Я хочу отфильтровать все точки, которые находятся внутри определенного ограничивающего прямоугольника, описанного 4 координатами [[x1, y1], [x2, y2]]
, то есть нижними левыми и верхними правыми координатами прямоугольника.
Я уже нашел следующий фрагмент кода для фильтрации координат с помощью numpy, и это почти то, что мне нужно. Единственная разница (если я правильно понял) в том, что мой двумерный массив также имеет z-координаты.
import random
import numpy as np
points = [(random.random(), random.random()) for i in range(100)]
bx1, bx2 = sorted([random.random(), random.random()])
by1, by2 = sorted([random.random(), random.random()])
pts = np.array(points)
ll = np.array([bx1, by1]) # lower-left
ur = np.array([bx2, by2]) # upper-right
inidx = np.all(np.logical_and(ll <= pts, pts <= ur), axis=1)
inbox = pts[inidx]
outbox = pts[np.logical_not(inidx)]
Как мне изменить приведенный выше код, чтобы он работал с xyz-координатами для фильтрации с помощью ограничивающего прямоугольника, описанного двумя xy-координатами?