numpy-使用另一个数组的行从一个数组中删除行

问题描述

我有两个数组,其中包含大型数据集-点云。 第一个数组由三列以上构成,其中前三列为XYZ坐标,其余列包含其他信息。一排基本上是具有给定的坐标和附加参数的一点-在此阶段不重要。

第二个数组仅包含三个XYZ列。

我要从第一个数组中删除XYZ与第二个数组中的任何行(点)在给定的缓冲区内重叠的所有行(点)。

例如,这是第一个数组:

15.0 23.0 35.5 222 211 254
13.0 33.0 34.5 223 232 244
15.0 23.0 35.5 226 211 253
15.4 22.1 32.5 122 231 252
14.1 24.4 36.5 242 212 251
15.0 23.4 55.5 223 211 253
15.0 23.5 45.5 222 211 254

这是第二个:

15.0 23.1 35.6
13.1 33.1 34.4
15.5 23.1 35.8
15.4 22.1 32.9
14.1 24.8 36.5
15.5 23.4 55.9
15.9 23.5 45.5

我给定的缓冲区是0.1。结果,我想获得以下数组:

15.0 23.0 35.5 226 211 253
15.4 22.1 32.5 122 231 252
14.1 24.4 36.5 242 212 251
15.0 23.4 55.5 223 211 253
15.0 23.5 45.5 222 211 254

使用numpy实施此任务的最佳方法是什么?

解决方法

那怎么样?

def filter(arr1,arr2,threshold):
  return arr1[np.linalg.norm(arr1[:,:3] - arr2,axis=1) < threshold]