np.rot90
のコードk=3
のあなたのケースでは、ありません:
# k == 3
return fliplr(m.swapaxes(0, 1))
ので
In [789]: np.fliplr(ar.swapaxes(0, 1))
Out[789]:
array([[-11, 0],
...
[ -3, 8],
[ -2, 9]])
だからあなた
fliplr(rot90(ar, 3))
だからアクションのあなたのペアが移調する減らす
np.fliplf(np.fliplr(ar.swapaxes(0, 1)))
# the flips cancel
ar.swapaxes(0,1)
# but this is just
ar.T
になります。
transpose
(およびswap
)は、配列の.shape
およびstrides
属性を変更するだけです。それはビューであり、コピーではありません。
np.fliplr
も、[:,::-1]
でストライドを変更するビューを作成します。
オリジナルar
:
In [818]: ar
Out[818]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[-11, -10, -9, -8, -7, -6, -5, -4, -3, -2]])
In [819]: x=np.fliplr(np.rot90(ar,3)) # your pair of actions
In [820]: x
Out[820]:
array([[ 0, -11],
[ 1, -10],
...
[ 8, -3],
[ 9, -2]])
In [821]: x[0,1]=11
In [822]: x
Out[822]:
array([[ 0, 11],
[ 1, -10],
...
[ 9, -2]])
In [823]: ar
Out[823]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[ 11, -10, -9, -8, -7, -6, -5, -4, -3, -2]])
x
の値を変更はar
の値を変更します。 2つの機能の使用にもかかわらず、x
はview
のままで、ar
です。
2つの機能は必要ありませんが、それほど高価ではありません。私たちは、マイクロ秒〜ナノ秒の時間を話しています。
In [824]: timeit np.fliplr(np.rot90(ar,3))
100000 loops, best of 3: 8.28 µs per loop
In [825]: timeit ar.T
1000000 loops, best of 3: 455 ns per loop
'np.transpose()'、エイリアス 'ar.T'(Ipythonの私
timeit
時間ははるかに小さいあなたです)。 –