11

n次元配列を使用していますが、番号付きの次元を逆にする方法が必要です。だからではなく

rev = a[:,:,::-1]

書けるようになりたい

rev = a.reverse(dimension=2)

または同様のもの。前者の構文に依存しない例を見つけることができないようです。

4

3 に答える 3

10

numpy (python) ソース コードを参照すると、特定の軸で動作する関数を記述するために使用するトリックがnp.swapaxes、ターゲット軸をそのaxis = 0位置に配置するために使用されることがわかります。次に、 で動作するコードを記述し、再び を0-axis使用して元の位置に戻します。np.swapaxes0-axis

ここで次のようにできます。

import numpy as np
def rev(a, axis = -1):
    a = np.asarray(a).swapaxes(axis, 0)
    a = a[::-1,...]
    a = a.swapaxes(0, axis)
    return a

a = np.arange(24).reshape(2,3,4)

print(rev(a, axis = 2))

収量

[[[ 3  2  1  0]
  [ 7  6  5  4]
  [11 10  9  8]]

 [[15 14 13 12]
  [19 18 17 16]
  [23 22 21 20]]]
于 2012-11-05T20:57:20.203 に答える
6

これは、一部のコンテキストsliceでは省略形であるで実行できることがわかりました。:トリックは、インデックス オブジェクトをスライスのタプルとして構築することです。

import numpy as np

def reverse(a, axis=0): 
    idx = [slice(None)]*len(a.shape)
    idx[axis] = slice(None, None, -1)
    return a[idx]

a = np.arange(24).reshape(2,3,4)
print reverse(a, axis=2)

これによりEllipsis、ワンライナーに折りたたむことができます:

a[[slice(None)]*axis + [slice(None, None, -1)] + [Ellipsis]]
于 2013-06-20T18:00:27.980 に答える