假设我有两个numpy数组,例如:
arr1 = np.array([[0,1],[0,2],[1,2],[2,3]])
和
arr2 = np.array([[0,1],[1,2]])
我现在想要的是一个函数,它将arr1
的行与arr2
的行进行比较,并输出以下形状的列表
[True,False,True,False]
其中第一位和倒数第二位为真,因为它们表示arr1
中也出现在arr2
中的行。
然而,我尝试使用numpy.isin(arr1,arr2)
,与元素arr2
相比,它给出了具有arr1
的元素的形状arr1
的阵列。
提前谢谢。
您可以使用广播:
(arr1==arr2[:,None]).all(2).any(0)
输出:array([ True, False, True, False])
解释:
- 将arr2扩展到一个额外的维度:
arr2[:,None]
- 按元素比较
- 最后一个维度上的
all
值为True吗?(即[0,1]==[0,1]
需要为[True, True]
( - 这些聚合的
any
是真的吗?([0,1]==[0,1]
(True
(或[0,1]!=[0,2]
(False
(中的一个就足够了(