繁体   English   中英

从2D NumPy数组中查找1D数组?

[英]Find 1D array from 2D NumPy arrays?

假设我有

[[array([x1, y1]), z1]
 [array([x2, y1]), z2]
 ......
 [array([xn, yn]), zn]
]

我想找到array([x5, y5])的索引。 如何使用NumPy有效地查找?

首先,由于混合的数据格式,我认为您不能以矢量化方式提取数组。 因此,您可以使用loop comprehension从每个列表元素中提取与数组对应的第一个元素作为2D数组。 因此,假设A是输入列表,我们将-

arr = np.vstack([a[0] for a in A])

然后,只需使用NumPy's broadcasting feature以矢量化方式进行比较,因为它将沿所有行广播该比较,并使用np.all(axis=1)查找所有匹配的行。 最后,使用np.flatnonzero获取最终索引。 因此,这个难题的最终和平将是-

idx = np.flatnonzero((arr == search1D).all(1))

您可以阅读this post的答案,以查看其他替代方法,以获取在2D数组问题中进行此类1D数组搜索的索引。

样品运行-

In [140]: A
Out[140]: 
[[array([3, 4]), 11],
 [array([2, 1]), 12],
 [array([4, 2]), 16],
 [array([2, 1]), 21]]

In [141]: search1D = [2,1]

In [142]: arr = np.vstack([a[0] for a in A]) # Extract 2D array

In [143]: arr
Out[143]: 
array([[3, 4],
       [2, 1],
       [4, 2],
       [2, 1]])

In [144]: np.flatnonzero((arr == search1D).all(1)) # Finally get indices
Out[144]: array([1, 3])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM