【问题标题】:Searching 2D numpy array of ids for partial id在 2D numpy id 数组中搜索部分 id
【发布时间】:2021-02-28 10:58:09
【问题描述】:

我有以下 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])

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

数组ids 包含一个 2 位 id,但是顺序是随机的。现在我需要遍历arr 的每一行,并查看这个 2 位部分 id 是否是任何 4 位 id 的一部分。在此示例中,ids 适合从 arr 顶部算起的第 2 行和第 3 行。

我当前使用 np.isin 的解决方案仅在数组 ids 也有 4 位行时才有效。

arr[np.isin(arr, ids).all(1)]

all(1) 更改为any(1) 也不能解决问题,因为这样一来,如果ids 的一个数字在arr 的一行中就足够了,但是我需要这两个值。

有人有紧凑的解决方案吗?

【问题讨论】:

    标签: arrays python-3.x numpy filter


    【解决方案1】:

    只需要布尔索引就可以只接受2 的值。在使用布尔数组执行 sum 等非布尔运算时,TrueFalse 值被解释为 10

    arr[np.isin(arr, ids).sum(1) == 2]
    

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      相关资源
      最近更新 更多