假设我有
[[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
以查看其他替代方法来获取此类1D
数组中的索引以进行数组搜索2D
。
样品运行-
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])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句