【问题标题】:find indices of matching rows in 2d array without loop (one shot) [duplicate]在没有循环的情况下查找二维数组中匹配行的索引(一次)[重复]
【发布时间】:2020-10-18 20:17:50
【问题描述】:

我想从二维数组 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]] 吗?

【问题讨论】:

标签: python arrays numpy search 2d


【解决方案1】:

如果您想要索引,您通常可以使用arg_x 函数,例如argmaxargwhere。如果您能弄清楚如何传递正确的布尔值列表,这里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]])

【讨论】:

  • 这就是我想要的,优雅且易于理解。谢谢!
【解决方案2】:

这应该是一个快速的解决方案,注意到两对具有相同的第一个坐标:

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] 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多