Python 根据另一个数组对齐numpy数组

Python 根据另一个数组对齐numpy数组,python,arrays,numpy,Python,Arrays,Numpy,我有一个包含任意整数的numpy数组a,还有另一个数组b,它总是a的子集,但是b中的数字顺序不同于a。我想按照b元素在a中出现的顺序对齐b元素 我希望b对齐为[2,6,10,12]。我怎样才能在numpy中高效地完成这项工作?方法1:一种方法,假设在一个- 更好的示例案例,元素处于受干扰状态,因此它不会对公共元素进行排序,以呈现多种情况- In [103]: a Out[103]: array([ 4, 12, 6, 5, 8, 7, 10, 2]) In [104]: b Out[

我有一个包含任意整数的numpy数组a,还有另一个数组b,它总是a的子集,但是b中的数字顺序不同于a。我想按照b元素在a中出现的顺序对齐b元素

我希望b对齐为[2,6,10,12]。我怎样才能在numpy中高效地完成这项工作?

方法1:一种方法,假设在一个-

更好的示例案例,元素处于受干扰状态,因此它不会对公共元素进行排序,以呈现多种情况-

In [103]: a
Out[103]: array([ 4, 12,  6,  5,  8,  7, 10,  2])

In [104]: b
Out[104]: array([10,  6,  2, 12])

In [105]: a[np.in1d(a,b)]
Out[105]: array([12,  6, 10,  2])
方法2:一种方法-


a中可能有重复的元素吗?不,a中不可能有重复的元素。您可以为InAD添加一条注释,假设a和b中没有重复的元素,而如果有重复的元素,则2可以工作。对不起,这两种元素中都不需要重复的元素,因为a中的重复项将被重复,无论它在结果中出现在b中的频率有多高,而b中的重复项将被忽略。@如果a中没有重复项,并且假定b是a的子集,则M将自动保证b也不会有任何重复项。如果我理解你的问题?我只是吹毛求疵:-你可能是对的,对于这个问题没什么关系。@mseifer我明白了:如果有DUP,这个问题无论如何都必须重新陈述,因为我们需要决定从a和b中选择哪些来决定这些DUP的顺序。
a[np.in1d(a,b)]
In [103]: a
Out[103]: array([ 4, 12,  6,  5,  8,  7, 10,  2])

In [104]: b
Out[104]: array([10,  6,  2, 12])

In [105]: a[np.in1d(a,b)]
Out[105]: array([12,  6, 10,  2])
sidx = a.argsort()
out = a[np.sort(sidx[np.searchsorted(a,b,sorter=sidx)])]