是否有基于行的 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
)之一就足够了)
假设我有两个 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
)之一就足够了)