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

Posted

技术标签:

【中文标题】Numpy - 使用另一个数组的行从一个数组中删除行【英文标题】:Numpy - removing rows from one array using rows of another one 【发布时间】:2020-12-15 00:02:14 【问题描述】:

我有两个数组,其中包含大型数据集 - 点云。 第一个数组由多于三列构建,其中前三列是 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 实现此任务的最佳方法是什么?

【问题讨论】:

【参考方案1】:

怎么样?

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

【讨论】:

以上是关于Numpy - 使用另一个数组的行从一个数组中删除行的主要内容,如果未能解决你的问题,请参考以下文章

使用索引同时从 numpy 2D 数组的行中减去多个值

当重复少于 n 次时,从 numpy 数组中删除行

Python numpy 多维数组由另一个数组值过滤

将行从一个选项卡复制并删除到另一个选项卡

Numpy - 从一维数组中删除最后一个元素的最佳方法?

如何根据条件从 numpy 数组中删除一行?