假设我有两个二维数组如下:
array([[3, 3, 1, 0],
[2, 3, 1, 3],
[0, 2, 3, 1],
[1, 0, 2, 3],
[3, 1, 0, 2]], dtype=int8)
array([[0, 3, 3, 1],
[0, 2, 3, 1],
[1, 0, 2, 3],
[3, 1, 0, 2],
[3, 3, 1, 0]], dtype=int8)
每个数组中的某些行在另一个数组中有一个按值(但不一定按索引)匹配的对应行,而有些则不匹配。
我想找到一种有效的方法来返回两个数组中对应于匹配行的索引对。如果它们是元组,我希望返回
(0,4)
(2,1)
(3,2)
(4,3)
最佳答案
这是一个全 numpy
解决方案 - 不一定比迭代 Python 解决方案更好。它仍然必须查看所有组合。
In [53]: np.array(np.all((x[:,None,:]==y[None,:,:]),axis=-1).nonzero()).T.tolist()
Out[53]: [[0, 4], [2, 1], [3, 2], [4, 3]]
中间数组是(5,5,4)
。 np.all
将其缩减为:
array([[False, False, False, False, True],
[False, False, False, False, False],
[False, True, False, False, False],
[False, False, True, False, False],
[False, False, False, True, False]], dtype=bool)
剩下的只是提取 True
在粗略的测试中,这次是 47.8 us; L1
字典的另一个答案在 38.3 us;第三个在 496 us 处有双循环。
关于python - 在两个二维数组中查找匹配行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230384/