通过一维数组过滤二维数组行
Filter 2D-array rows by a 1D-array
我有一个数据库查询结果作为一个 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
。 并且此方法returns 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']])
你喜欢这样的结果吗?
>>> c = a[np.where(np.in1d(a[:, 0], b))]
>>> c
array([['1', 'wat'],
['2', 'cat']],
dtype='<U11')
>>> type(c)
<class 'numpy.ndarray'>
我有一个数据库查询结果作为一个 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
。 并且此方法returns 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']])
你喜欢这样的结果吗?
>>> c = a[np.where(np.in1d(a[:, 0], b))]
>>> c
array([['1', 'wat'],
['2', 'cat']],
dtype='<U11')
>>> type(c)
<class 'numpy.ndarray'>