我想从二维数组 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]]吗?
2 回答
皈依舞
TA贡献1851条经验 获得超3个赞
如果你想要索引,你通常会使用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]])
守着一只汪
TA贡献1872条经验 获得超3个赞
这应该是一个快速的解决方案,注意到两对具有相同的第一个坐标:
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]
添加回答
举报
0/150
提交
取消