【问题标题】:Using multiple filter on multiple columns of numpy array - more efficient way?在 numpy 数组的多列上使用多个过滤器 - 更有效的方法?
【发布时间】: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


    【解决方案1】:

    在arr 和all-reduce 中使用np.isin 得到result -

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

    【讨论】:

    • 干杯,这更优雅。
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多