python - 在两个二维数组中查找匹配行的索引

标签 python numpy

假设我有两个二维数组如下:

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/

相关文章:

python - 使用 Pillow 和 Numpy 进行图像推导

python - 如何使用 SQLALchemyJobStore 保存 python Apscheduler

python - 在 python 中从二进制数据保存 JPG 图像时出现问题

python - input() 函数对我不起作用(Python 3.3)

python - 移动平均线或移动平均线

python - Google App Engine - 缺少 numpy.core.multiarray

python - get genfromtxt/loadtxt 忽略被忽略的列/行中的数据类型

python - 在二进制数组中查找直角三角形坐标

python - 为什么 set() 能让这段代码运行得更快?

python - 如何替换 Python 中第一次出现的正则表达式?