代码之家  ›  专栏  ›  技术社区  ›  Felix

按一维数组筛选二维数组行

  •  0
  • Felix  · 技术社区  · 6 年前

    我将数据库查询的结果作为nd数组。我想按结果第一列中的ID列表筛选结果。

    Query result:    Filter:     Desired outcome:
    ID | Field       ID          ID | Field
    ---+------       ---         ---+------
    0  | Asd         1           1  | Wat
    1  | Wat         2           2  | Cat
    2  | Cat
    6  | Yep
    

    当然,可以使用列表理解:

    out = [i for i in result if i[0] in filter]
    

    但我正在寻找一种麻木的解决方案,比如 np.where . 此方法返回numpy数组的列表,而不是 ndarray . 所以,完全不可用。

    你知道这种方法吗?

    编辑:用于实验的沙盒

    如果你想尝试的话,这里有复制粘贴的代码。

    a = np.array([[0, 'asd'],[1, 'wat'],[2, 'cat'],[6, 'yep']])
    b = np.array([1, 2], dtype=str)
    
    out = np.array([i for i in a if i[0] in b])
    > array([['1', 'wat'], ['2', 'cat']])
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Antonina    6 年前

    你想得到这样的结果吗?

    >>> c = a[np.where(np.in1d(a[:, 0], b))]
    >>> c
    array([['1', 'wat'],
           ['2', 'cat']],
          dtype='<U11')
    >>> type(c)
    <class 'numpy.ndarray'>