2013-06-29 10 views

Antwort

7

würde ich ein Tupel von slice Objekte verwenden:

def reversedim(M,k=0): 
    idx = tuple((slice(None,None,-1) if ii == k else slice(None) 
      for ii in xrange(M.ndim))) 
    return M[idx] 
+6

@ NilsWerner Ich glaube nicht. Siehe [hier] (http://docs.scipy.org/doc/numpy/user/basics.indexing.html) - "Beachten Sie, dass Arrays nicht die internen Array-Daten kopieren, sondern auch neue Ansichten der Originaldaten erzeugen . " –

9

Sie können entweder ein Tupel von slice Objekte konstruieren wie @ali_m vermuten lässt, oder so etwas tun:

reversed_arr = np.swapaxes(np.swapaxes(arr, 0, k)[::-1], 0, k) 

Dadurch wird die gewünschte Achse an der Vorderseite des Formtupels platziert, dann wird diese erste Achse umgekehrt und dann in die ursprüngliche Position zurückgebracht.

Einige Leute denken, dass dieser Ansatz Lesbarkeit fehlt, aber ich stimme nicht zu.

+0

Da es eine Ansicht zurückgibt, wird Array nicht kopiert, nette Annäherung. Außerdem fand ich diesen Ansatz am elegantesten, wenn die Anordnung auf LHS in der angegebenen "Achse" geändert werden muss. – dashesy

Verwandte Themen