是否有基于行的 isin() 等效的 numpy 函数?

Is there an equivalent numpy function to isin() that works row based?

假设我有两个 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]
  • 比较element-wise
  • 最后一个维度的 all 值为真? (即 [0,1]==[0,1] 需要 [True, True]
  • 这些聚合中的 any 是真的吗? ([0,1]==[0,1]True)或[0,1]!=[0,2]False)之一就足够了)