我有一个包含任意整数的numpy数组a
,我有另一个数组b
,(它始终是a
的子集,但是b
中的数字顺序1}}与a
不同。我想按照b
中显示的顺序对齐a
的元素。
a = np.array([4,2,6,5,8,7,10,12]);
b = np.array([10,6,2,12]),
我希望b
对齐为[2,6,10,12]。我怎么能有效地在numpy中做到这一点?
答案 0 :(得分:4)
方法#1: np.in1d
的一种方法,假设a
中没有重复项 -
a[np.in1d(a,b)]
更好的示例案例,其中a
中的元素受到干扰,因此未针对常见元素进行排序以呈现多种情况 -
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:使用np.searchsorted
-
sidx = a.argsort()
out = a[np.sort(sidx[np.searchsorted(a,b,sorter=sidx)])]