Как эффективно применять фильтры нескольких диапазонов к массиву numpy? - PullRequest
0 голосов
/ 09 июля 2019

Я моделирую физическую проблему с тысячами объектов, у каждого из которых есть координаты x, y и z.Я хочу идентифицировать те, которые находятся в пределах некоторого x-расстояния, y-расстояния и z-расстояния определенной точки в пространстве.

Один из способов сделать это заключается в следующем:

# these are all the coordinates of my thousands of objects
# this can be put into one big array or any other data type earlier if necessary
xpositions = np.array([0.5, -17, 3...])
ypositions = np.array([3, 2, 0,...])
zpositions = np.array([17.5, -8, -1...])

# this is a point in space I am interested in and a small volume around it
x, y, z = -16.5, 0.2, -6
dx, dy, dz = 0.6, 0.5, 3.1

# lets get boolean masks for the objects which fall within this volume around x, y, z
rightx = (abs(xpositions-x)<dx)
righty = (abs(ypositions-y)<dy)
rightz = (abs(zpositions-z)<dz)

# hence the coordinates of the closeby objects
xpositions[rightx*righty*rightz]
ypositions[rightx*righty*rightz]
zpositions[rightx*righty*rightz]

Таким образом, я должен сравнить каждую координату каждого объекта с координатами, представляющими интерес для меня, хотя в большинстве случаев в желаемом объеме будет находиться только крошечная дробь.Есть ли алгоритм или функция, возможно, в numpy или intertools, которая может сделать это более эффективно - возможно, с некоторой умной сортировкой ?

Спасибо!

...