在 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]
有人知道更简单的解决方案吗?也许使用发电机?
在 arr
和 all
-reduce 中使用 np.isin
得到 result
-
In [15]: arr[np.isin(arr, ids).all(1)]
Out[15]: array([[5, 6, 7, 8]])
我有以下 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]
有人知道更简单的解决方案吗?也许使用发电机?
在 arr
和 all
-reduce 中使用 np.isin
得到 result
-
In [15]: arr[np.isin(arr, ids).all(1)]
Out[15]: array([[5, 6, 7, 8]])