У меня есть миллионы xyz-координат из нескольких файлов облаков точек, которые я храню внутри двумерного массива numpy: [[x1, y1, z1], [x2, y2, z2],..., [xn, yn, zn]]
.Поиск точек в ограничивающей рамке с numpy
Я хочу отфильтровать все точки, которые находятся внутри определенной ограничивающей рамки, описываемой четырьмя координатами [[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)]
Как бы я должен modifiy код, чтобы заставить его работать с АБВ-координатами, чтобы быть отфильтрованы ограничивающего параллелепипеда, описанного с двумя XY-координат?
Но, как и я потерял бы г-информацию, или нет? Мне определенно нужно сохранить их для последующих вычислений. – conste
@conste Вы будете использовать оригинальные 3D 'pts' для создания' inbox'. – DyZ