检查两个np数组内部是否具有相同的元组

问题描述 投票:0回答:1

我有两个数组,其中有多个np数组,其中包含(x,y)中的点的元组。

A1 = array([array [(x1,y1),(x2,y2)..],[array [(x1,y1),(x2,y2)..]])]

A2 = array([array [(x1,y1),(x2,y2)..],[array [(x1,y1),(x2,y2)..]])]

我想检查来自A1的一个数组中的元组是否存在于来自A2的数组中。我已经尝试过np.isin(A1 [j],A2 [j2]),但是即使它们具有相同的元素,我也会出错。如果我使用np.isin((x1,y1),A2 [j2]),则我的值将分别为true,但不会将元素视为元组,而是分别查找x1和y2的匹配项。

list1=[(1,2),(2,2),(3,6)]
ar1=np.empty(len(list1), dtype=object)
ar1[:]=list1

list2=[(1,2),(3,2),(5,4)]
ar2=np.empty(len(list2), dtype=object)
ar2[:]=list2

我在两个np数组(如A1和A2)中有多个数组,如ar1和ar2

python arrays numpy numpy-ndarray np
1个回答
0
投票
In [319]: ar1                                                                                 
Out[319]: array([(1, 2), (2, 2), (3, 6)], dtype=object)
In [320]: ar2                                                                                 
Out[320]: array([(1, 2), (3, 2), (5, 4)], dtype=object)

with isin:

In [325]: np.isin(ar1,ar2)                                                                    
Out[325]: array([False, False, False])

我认为isin的相关部分是:

        mask = np.zeros(len(ar1), dtype=bool)
        for a in ar2:
            mask |= (ar1 == a)
        return mask

In [326]: [ar1==a for a in ar2]                                                               
/usr/local/bin/ipython3:1: DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
  #!/usr/bin/python3
Out[326]: [False, False, False]

但让我们尝试进行“广播”比较(似乎可以很好地处理元组相等性:)]

In [327]: ar1[:,None]==ar2                                                                    
Out[327]: 
array([[ True, False, False],
       [False, False, False],
       [False, False, False]])
    
© www.soinside.com 2019 - 2024. All rights reserved.