【发布时间】:2020-11-02 17:16:15
【问题描述】:
我有以下 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 顶部的第二行。所以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]
有人知道更简单的解决方案吗?也许使用生成器?
【问题讨论】:
标签: python-3.x numpy filter generator