pythonical比较numpy中两个具有排列行的数组的索引
我有两个大小相同的numpy NDARRAY,行排列如下:pythonical比较numpy中两个具有排列行的数组的索引,python,numpy,Python,Numpy,我有两个大小相同的numpy NDARRAY,行排列如下: import numpy as np a = np.ndarray([[1,2,3], [4,5,6], [7,8,9], [10,11,12]]) b = np.ndarray([[7,8,9], [10,11,12], [1,2,3], [4,
import numpy as np
a = np.ndarray([[1,2,3],
[4,5,6],
[7,8,9],
[10,11,12]])
b = np.ndarray([[7,8,9],
[10,11,12],
[1,2,3],
[4,5,6]])
我想要一个函数,返回第一个数组中每一行相对于第二个数组的索引。例如:
compare_row_indices(a,b)
会回来吗
[2,3,0,1] # 0-based indexing
实现此功能最符合Python的方式是什么?可能不是最好的方式,但这似乎可行(将其分解为多个步骤以便于可视化):
太好了,谢谢!在一行中,这将产生:
yo=np.argwhere(np.all(a[:,None]==b,axis=-1))[:,1]
>>> cmp = a[:, None] == b
>>> cmp
array([[[False, False, False],
[False, False, False],
[ True, True, True],
[False, False, False]],
[[False, False, False],
[False, False, False],
[False, False, False],
[ True, True, True]],
[[ True, True, True],
[False, False, False],
[False, False, False],
[False, False, False]],
[[False, False, False],
[ True, True, True],
[False, False, False],
[False, False, False]]])
>>> eq = np.all(cmp, axis=-1)
>>> eq
array([[False, False, True, False],
[False, False, False, True],
[ True, False, False, False],
[False, True, False, False]])
>>> np.argwhere(eq)
array([[0, 2],
[1, 3],
[2, 0],
[3, 1]])
>>> np.argwhere(eq)[:, 1]
array([2, 3, 0, 1])