为表示三维点坐标的两个二维数组创建布尔掩码



我有两个数组,A是(m, 3)形状的数组,B是(n, 3)具有m > n的形状的数组(这个条件总是满足的。事实上,m至少是n的3倍(。这两个阵列看起来像这样:

A = [[x1  y1  z1]                    |  B = [[u1  v1  w1] 
[x2  y2  z2]                    |       [u2  v2  w2] 
...                             |       ...        
...                             |       [un  vn  wn]]   
...                             |
...                             |
[xm  ym  zm]]                   |

(u,v,w(和(x,y,z(中的点的出现顺序不一定在A中相同,这意味着,为了便于说明,[u1 v1 w1]可以位于256的位置(行(,15处的[u2 v2 w2]569001时的[u3 v3 w3]等。

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

我想创建一个大小与a相同的布尔掩码,稍后将在代码中使用,这样mask_A = [True, False, False, False, True,..., False],其中True意味着点也存在于B中,而False在点没有出现在B中时放置。

我还想在没有任何循环的情况下使用它,因为大小很大,创建掩码的过程要重复多次。只要能快速完成任务,我就可以更改数组的类型(将它们变成列表、集合等等(。

我已经找到了许多关于遮罩和2D阵列的答案,但没有一个能回答我的问题。

谢谢。

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

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

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