2013-11-28 21 views
19

有沒有辦法在numpy的二維陣列,以改變列的順序,以一個新的和任意順序? 例如,我有一個數組重排列

array([[10, 20, 30, 40, 50], 
     [ 6, 7, 8, 9, 10]]) 

,我想把它變成,通過對列應用置換

0 -> 0 
1 -> 4 
2 -> 1 
3 -> 3 
4 -> 2 

array([[10, 30, 50, 40, 20], 
     [ 6, 8, 10, 9, 7]]) 

。因此,在新矩陣中,我希望原稿的第一列保留原位,第二列移至最後一列等等。

是否有一個numpy的功能做到這一點?我有一個相當大的矩陣,並期望得到更大的,所以我需要一個解決方案,快速,到位做到這一點(如果可能置換矩陣是一個不走)

謝謝。

回答

40

這是可能的使用花哨的索引:

>>> import numpy as np 
>>> a = np.array([[10, 20, 30, 40, 50], 
...    [ 6, 7, 8, 9, 10]]) 
>>> your_permutation = [0,4,1,3,2] 
>>> i = np.argsort(your_permutation) 
>>> i 
array([0, 2, 4, 3, 1]) 
>>> a[:,i] 
array([[10, 30, 50, 40, 20], 
     [ 6, 8, 10, 9, 7]])