为表示 3D 点坐标的两个 2D 数组创建布尔掩码

时间:2021-04-22 11:26:42

标签: python arrays numpy

我有两个数组,A 是一个 (m, 3) 形状的数组,B 是一个 (n, 3) 形状的数组,带有 { {1}}(这个条件总是满足的。实际上 m 至少是 n 的 3 倍)。这两个数组看起来像这样:

m > n

(u, v, w)(x, y, z) 是 3D 点的坐标。 B 中的所有点都存在于 A 中(其中包含的点较多,大部分不在 B 中)。需要注意的一件事是点在 B 中的出现顺序不一定在 A 中相同,这意味着,为了说明起见,[u1 v1 w1] 可以在位置(行)256[u2 v2 w2] 15[u3 v3 w3]569001

另一个重要的细节:坐标是浮点数,如果两个点对应,则uk = xj, vk = yj, wk = zj(意思是这些点有准确的位置,而不只是彼此靠近)。

我想创建一个与 A 大小相同的布尔掩码,稍后将在代码中使用,以便 A = [[x1 y1 z1] | B = [[u1 v1 w1] [x2 y2 z2] | [u2 v2 w2] ... | ... ... | [un vn wn]] ... | ... | [xm ym zm]] | 其中 mask_A = [True, False, False, False, True,..., False] 表示该点也存在于 B 中,而 {{ 1}} 当点没有出现在 B 中时放置。

我也想用它没有任何循环,因为尺寸很大,而且创建蒙版的过程要重复多次。只要能快速完成工作,更改数组的类型(将它们转换为列表、集合等等...)都没有问题。

我找到了多个处理掩码和二维数组的答案,但没有一个回答我的问题。

谢谢。

1 个答案:

答案 0 :(得分:2)

由于它们都是 numpy 数组,您可以使用函数 numpy.intersect1d

_, indices_ar1, _ = numpy.intersect1d(ar1, ar2, assume_unique=False, return_indices=True)

我不知道你的申请,但也许这对你来说已经足够了。如果不是,您只需将这些索引转换为二进制掩码。

相关问题