在没有循环的情况下找到二维数组中匹配行的索引(一次)

我想从二维数组 a 中找到多个匹配行


a = np.array([[2, 1],

          [3, 3],

          [4, 6],

          [4, 8],

          [4, 7],

          [4, 3]])

我必须搜索以下条目


 b = np.array([[4,6],

          [4,7]])

我知道我可以遍历 b 并执行以下操作


for i in range(len(b)) :

   print(np.where(np.all(a==b[i],axis=1))[0])

我得到关注


[2]

[4]

我可以不使用任何循环直接获取 [[2],[4]]吗?


猛跑小猪
浏览 93回答 2
2回答

皈依舞

如果你想要索引,你通常会使用arg_x像argmax和这样的函数argwhere。np.argwhere如果您能弄清楚如何传递正确的布尔值列表,这里将为您提供索引。你可以用np.isin()做到这一点:a = np.array([[2, 1],          [3, 3],          [4, 6],          [4, 8],          [4, 7],          [4, 3]])b = np.array([[4,6], [4,7]])np.argwhere(np.isin(a, b).all(axis=1))哪个返回:array([[2],       [4]])

守着一只汪

这应该是一个快速的解决方案,注意到两对具有相同的第一个坐标:np.where((a[:, 0] == 4) & ((a[:, 1] == 6) | (a[:, 1] == 7)))  # Out:# (array([2, 4]),)表达方式print((a[:, 0] == 4) & ((a[:, 1] == 6) | (a[:, 1] == 7)))                                    给[False False  True False  True False] 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python