在 numpy 数组的多列上使用多个过滤器 - 更有效的方法?

Using multiple filter on multiple columns of numpy array - more efficient way?

我有以下 2 个数组:

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

 ids = np.array([6, 5, 7, 8])

数组 arr 中的每一行都描述了一个 4 位数的 ID,没有多余的 ID - 无论是在它们的值还是它们的组合中。因此,如果 [1, 2, 3, 4] 存在,则这 4 位数字的其他组合不存在。这将在一秒钟内很重要。

数组 ids 包含一个 4 位数的 ID,但顺序可能不正确。现在我需要遍历 arr 的每一行并查看此 ID 是否存在。在此示例中,ids 适合从 arr 顶部算起的第 2 行。所以arr[1,:].

我当前的解决方案为每列创建一个过滤器,以检查 ids 的值是否存在于 4 列中的任何一列中。之后,我在 arr 上使用这些过滤器。这似乎太复杂了。

所以我几乎是这样做的:

 filter_1 = np.in1d(arr[:, 0], ids)
 filter_2 = np.in1d(arr[:, 1], ids)
 filter_3 = np.in1d(arr[:, 2], ids)
 filter_4 = np.in1d(arr[:, 3], ids)

 result = arr[filter_1 & filter_2 & filter_3 & filter_4]

有人知道更简单的解决方案吗?也许使用发电机?

arrall-reduce 中使用 np.isin 得到 result -

In [15]: arr[np.isin(arr, ids).all(1)]
Out[15]: array([[5, 6, 7, 8]])