我正在使用大约100x100网格中的相当大的2D点数据集(500,000至1m)。为了我们的目的,让我们使用较小的1000点数据集。
x = np.random.random_sample((1000,)) * 100
y = np.random.random_sample((1000,)) * 100
,并且本质上想获得位于半径为r的x0,y0的圆内的点的索引。
可以轻松实现idx = np.signbit((x - x0)*(x - x0) + (y - y0)*(y - y0) - r*r)
然后,我想对该圆内的2D点做一些操作,将x0,y0稍微移动一点,然后对新圆内的数据进行相同的处理,即
x0 = np.linspace(0,100,100)
y0 = np.linspace(0,100,100)
r = 2
for i in range(0,100):
for j in range(0,100):
idx = np.signbit((x - x0[i])*(x - x0[i]) + (y - y0[j])*(y - y0[j]) - r*r)
#Do Something Here with x[idx] and y[idx]
但是,搜索idx似乎需要一段时间,尤其是对于大型数据集。有没有一种方法可以搜索位于半径为2的圆中的点,其中x0,y0 = 0,0,然后在下一个循环(其中x0 = 0,y0 = 1)中仅搜索与索引为的原子接近的原子。在第一个循环中为true(因为圆心尚未远离在第一个循环中标记为true的这些点)。
或者我是否完全丢失了某些东西,有没有一种更有效的方式将2D数据分类到(可能是重叠的)区域中(它不一定是圆的,但是我为等式的简单而选择了它。) / p>
谢谢!!!