根据另一个数组对NumPy数组进行对齐

3
我有一个包含任意整数的numpy数组a,还有另一个数组b(它始终是a的子集,但b中数字的顺序与a不同)。我想按照a中出现的顺序对b的元素进行对齐。
a = np.array([4,2,6,5,8,7,10,12]);
b = np.array([10,6,2,12]),

我希望b按照[2,6,10,12]的顺序对齐。在numpy中如何高效地实现?

a 中可能存在重复元素吗? - Divakar
a 中不能有重复元素。 - Shew
1个回答

5
方法一: 使用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)])]

你可以为 in1d 添加一条注释,说明它假设 ab 中没有重复项,而 #2 则适用于存在重复项的情况。 - MSeifert
抱歉,两者都不允许重复,因为在 a 中的重复项将在结果中重复(无论 b 中有多少次出现),而 b 中的重复项会被忽略。 - MSeifert
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Divakar
我只是吹毛求疵 :-) 你可能是对的,对于这个问题来说并不重要。 - MSeifert
如果有重复项,问题必须重新说明,因为我们需要决定从ab中选择哪些来确定这些重复项的顺序。 - Divakar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接