2015-05-04 102 views
1

這裏有很多關於排序數組的問題,但是我無法找到解決我的問題的問題(這使我希望我沒有想到複雜的方法) 。所以在這裏,我們去:對一個數組進行排序以適應另一個numpy數組

我有兩個數組有相同的值,但在不同的順序:

a = np.array([4, 2, 5, 6]) 
# b = np.random.permutation(a) # general case 
b = np.array([5, 2, 6, 4]) 

我所需要的指標之類B到A,所以在這裏:

ind = np.array([3, 1, 0, 2]) 

注意我不想改變一個。

_,C = np.where(a[:,None] == b) 

採樣運行 - -

+1

,一個排序......始終是真的嗎? –

+0

對不起,我試着讓這個例子儘可能簡單,並且實際上讓它變得簡單...在2中交換了2和4 – Lukas

回答

3

在這種情況下,a已經排序。所以,你需要的只是b的排序索引。

然而,如果a沒有排序,你可以做

a = array([2, 4, 5, 6]) 
b = array([5, 2, 6, 4]) 
b.argsort()[a.argsort()] # array([1, 3, 0, 2]) 

它使用argsort方法返回排序ba所需要的指標。

又如:

a = array([4, 2, 5, 6]) 
b = array([5, 2, 6, 4]) 
b.argsort()[a.argsort()] # array([3, 1, 0, 2]) 
在這種情況下
3

一個與broadcasting & np.where方法

In [210]: a = np.array([4, 2, 5, 6]) 

In [211]: b = np.array([5, 2, 6, 4]) 

In [212]: _,C = np.where(a[:,None] == b) 

In [213]: C 
Out[213]: array([3, 1, 0, 2], dtype=int64) 
相關問題