我有以下两个数组:
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
这样的非布尔运算时,True
和False
的值被解释为1
和0
arr[np.isin(arr, ids).sum(1) == 2]