n次元配列を使用していますが、番号付きの次元を逆にする方法が必要です。だからではなく
rev = a[:,:,::-1]
書けるようになりたい
rev = a.reverse(dimension=2)
または同様のもの。前者の構文に依存しない例を見つけることができないようです。
n次元配列を使用していますが、番号付きの次元を逆にする方法が必要です。だからではなく
rev = a[:,:,::-1]
書けるようになりたい
rev = a.reverse(dimension=2)
または同様のもの。前者の構文に依存しない例を見つけることができないようです。
numpy (python) ソース コードを参照すると、特定の軸で動作する関数を記述するために使用するトリックがnp.swapaxes
、ターゲット軸をそのaxis = 0
位置に配置するために使用されることがわかります。次に、 で動作するコードを記述し、再び を0-axis
使用して元の位置に戻します。np.swapaxes
0-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]]]
これは、一部のコンテキスト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]]