在 python 中执行反转置的最佳方法是什么?
What is the best way to perform an anti-transpose in python?
假设我有一个数组
a = np.arange(16).reshape((4,4))
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
但是我想要
15 11 7 3
14 10 6 2
13 9 5 1
12 8 4 0
这是次对角线的翻转,或者说是一种反转置。
如何在 numpy 中执行此操作?
可以执行以下操作之一:
rot90(a,2).T
rot90(flipud(a),1)
rot90(fliplr(a), -1)
或评论中建议的 hpaulj(感谢 hpaulj)
a[::-1,::-1].T
这里是反转置1000个随机10000x10000数组后最慢方法的速度排名。
- 63.5% -
a[::-1,::-1].T
- 85.6% -
rot90(a,2).T
- 97.8% -
rot90(flipud(a),1)
- 100% -
rot90(fliplr(a),-1)
这里还有一个要加入的。
a.ravel('F')[::-1].reshape(a.shape)
这样试试,
np=np[::-1] #reverse the array
a = np.arange(16).reshape((4,4))
假设我有一个数组
a = np.arange(16).reshape((4,4))
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
但是我想要
15 11 7 3
14 10 6 2
13 9 5 1
12 8 4 0
这是次对角线的翻转,或者说是一种反转置。
如何在 numpy 中执行此操作?
可以执行以下操作之一:
rot90(a,2).T
rot90(flipud(a),1)
rot90(fliplr(a), -1)
或评论中建议的 hpaulj(感谢 hpaulj)
a[::-1,::-1].T
这里是反转置1000个随机10000x10000数组后最慢方法的速度排名。
- 63.5% -
a[::-1,::-1].T
- 85.6% -
rot90(a,2).T
- 97.8% -
rot90(flipud(a),1)
- 100% -
rot90(fliplr(a),-1)
这里还有一个要加入的。
a.ravel('F')[::-1].reshape(a.shape)
这样试试,
np=np[::-1] #reverse the array
a = np.arange(16).reshape((4,4))