我有两个数组,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)
我不知道你的申请,但也许这对你来说已经足够了。如果不是,您只需要将这些索引转换为二进制掩码。