正在id的2D numpy数组中搜索部分id



我有以下两个数组:

arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8], 
[7, 5, 6, 3],
[2, 4, 8, 9]]
ids = np.array([6, 5])

数组arr中的每一行都描述了一个4位数的id,没有多余的id——无论是在它们的值中还是在它们的组合中。因此,如果[1, 2, 3, 4]存在,那么这4个数字的其他组合就不可能存在。这一点很重要。

数组ids包含一个2位数的id,但是顺序是随机的。现在我需要遍历arr的每一行,看看这个2位数的部分id是否是任何4位数id的一部分。在这个例子中,ids适合arr顶部的第二行和第三行。

我当前使用np.isin的解决方案仅在数组ids也有4位行的情况下有效。

arr[np.isin(arr, ids).all(1)]

all(1)更改为any(1)也无济于事,因为这样,如果ids的一个数字在arr的一行中就足够了,但我需要两个值。

有人有紧凑的解决方案吗?

只需要布尔索引就可以只接受2的值。当使用布尔数组执行像sum这样的非布尔运算时,TrueFalse的值被解释为10

arr[np.isin(arr, ids).sum(1) == 2]

相关内容

  • 没有找到相关文章

最新更新