2014-09-29 63 views
2

如果AB是对应于相同(不同)元件的两个排序两个阵列,有一个唯一的索引阵列P使得A[P]是等于B。例如,如果AB鉴于重排A和B,计算p,使得A [P] ==乙

A = ['b', 'c', 'e', 'd', 'a'] 
B = ['a', 'd', 'c', 'b', 'e'] 

然后将所需P

P = [4, 3, 1, 0, 2] 

是否numpy的(或标准Python)已用于计算这样一个P的功能?

回答

3

使用numpy的

import numpy as np 

A = np.array(['b', 'c', 'e', 'd', 'a']) 
B = np.array(['a', 'd', 'c', 'b', 'e']) 

P = np.empty(len(A), int) 
P[B.argsort()] = A.argsort() 
+0

尼斯。当元素数量很大时,这将比* g4ur4v的答案快得多:O(n * log(n))与O(n ** 2)。 – 2014-09-30 15:07:39

4

使用标准的Python

>>> A = ['b', 'c', 'e', 'd', 'a'] 
>>> B = ['a', 'd', 'c', 'b', 'e'] 
>>> P = [ A.index(i) for i in B ] 
>>> P 
[4, 3, 1, 0, 2] 
相关问题