在 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数组后最慢方法的速度排名。

  1. 63.5% - a[::-1,::-1].T
  2. 85.6% - rot90(a,2).T
  3. 97.8% - rot90(flipud(a),1)
  4. 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))