如何有效地将多个范围过滤器应用于numpy数组?

时间:2019-07-09 01:26:15

标签: python algorithm numpy sorting itertools

我正在用一个具有数千个对象的物理模型进行建模,每个对象的坐标分别为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]

通过这种方式,我必须将每个对象的每个坐标与我感兴趣的坐标进行比较,即使在大多数情况下,所需的体积中只有很小的一部分。在numpyintertools中是否可能有一种算法或函数可以更有效地执行此操作-可能需要一些巧妙的排序

谢谢!

0 个答案:

没有答案