我有两个数组,其中有多个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
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]])