2013-06-29 43 views

cevap

7

Bunun için slice nesnelerin bir demet kullanmak:

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 Ben öyle düşünmüyorum. Bkz. [Burada] (http://docs.scipy.org/doc/numpy/user/basics.indexing.html) - "Dizilerin dilimlerinin dahili dizi verilerini kopyalamadığını, ayrıca orijinal verilerin yeni görünümlerini oluşturduğunu unutmayın. ." –

9

Sen @ali_m anlaşılacağı gibi slice nesnelerin bir demet oluşturmak veya böyle bir şey yapabilir ya:

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

Bu, istenen ekseni şekil tuplünün önüne yerleştirir, ardından bu ilk ekseni ters çevirir ve ardından orijinal konumuna geri döndürür. Bazı insanlar bu yaklaşımın okunabilirlikten yoksun olduğunu düşünür, ancak katılmıyorum.

+0

Bir görünüm döndürdüğünden, dizi kopyalanmaz, güzel yaklaşım. Ayrıca, LHS'deki dizinin verilen 'eksen'de değiştirilmesi gerektiğinde bu yaklaşımı en zarif buldum. – dashesy