2013-11-28 11 views
19

Gibt es eine Möglichkeit, die Reihenfolge der Spalten in einem numpligen 2D-Array in eine neue und willkürliche Reihenfolge zu ändern? Zum Beispiel habe ich ein ArrayAnordnen von Spalten eines zweidimensionalen 2D-Arrays

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

und ich möchte es in, sagen durch die Anwendung der Permutation

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

auf den Säulen

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

ändern. In der neuen Matrix möchte ich daher, dass die erste Spalte des Originals an Ort und Stelle bleibt, die zweite Spalte in die letzte Spalte und so weiter.

Gibt es eine numpy Funktion, es zu tun? Ich habe eine ziemlich große Matrix und erwarte, noch größere zu bekommen, also brauche ich eine Lösung, die das schnell und an Ort und Stelle tut, wenn möglich (Permutationsmatrizen sind ein No-Go)

Vielen Dank.

Antwort

40

Dies ist möglich, mit Phantasie Indizierung:

>>> 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]])