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

san*_*ion 4 python arrays search 2d numpy

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

a = np.array([[2, 1],
          [3, 3],
          [4, 6],
          [4, 8],
          [4, 7],
          [4, 3]])
Run Code Online (Sandbox Code Playgroud)

我必须搜索以下条目

 b = np.array([[4,6],
          [4,7]])
Run Code Online (Sandbox Code Playgroud)

我知道我可以循环 b 并执行以下操作

for i in range(len(b)) :
   print(np.where(np.all(a==b[i],axis=1))[0])
Run Code Online (Sandbox Code Playgroud)

我开始关注

[2]
[4]
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*yer 6

如果您想要索引,您通常会使用和arg_x等函数。如果您能弄清楚如何传递正确的布尔值列表,这里将为您提供索引。您可以使用np.isin()来做到这一点:argmaxargwherenp.argwhere

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))
Run Code Online (Sandbox Code Playgroud)

返回:

array([[2],
       [4]])
Run Code Online (Sandbox Code Playgroud)

  • 我相信这是偶然的(因为第二行只包含唯一元素),不是吗?如果第一行是 [2,6] 这也将匹配它并返回 0 索引 (3认同)