【问题标题】:Filter 2D-array rows by a 1D-array通过一维数组过滤二维数组行
【发布时间】:2018-12-28 09:15:28
【问题描述】:

我有一个数据库查询的结果作为 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]

但我正在寻找 NumPy 类型的解决方案,例如 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']])

【问题讨论】:

  • 你忘了在你的例子中提供result
  • @Kefeng91 糟糕,数组名称现已修复。

标签: python arrays numpy filter numpy-ndarray


【解决方案1】:

你喜欢得到这样的结果吗?

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

【讨论】:

  • 太完美了,谢谢!我知道有这样的功能。
猜你喜欢
  • 2013-06-23
  • 2011-05-24
  • 2013-06-09
  • 2018-06-25
  • 2018-02-10
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多