在python中执行反转置的最佳方法是什么?

Jad*_*nik 6 python transpose numpy matrix

让我们说我有一个阵列

a = np.arange(16).reshape((4,4))

0   1  2   3
4   5  6   7
8   9  10  11
12  13 14  15
Run Code Online (Sandbox Code Playgroud)

但我想要

15  11  7  3
14  10  6  2
13  9   5  1
12  8   4  0
Run Code Online (Sandbox Code Playgroud)

这是翻过次要对角线的翻转,或者是一种反转置.

怎么能在numpy中做到这一点?

Jad*_*nik 5

一个人可以执行以下任一操作:

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 [::-1,::-1] .T`; 这是一个“视图”,共享相同的数据缓冲区,因此将尽可能快。要测试视图,请尝试更改一个元素,然后查看它是否更改了原始元素。反向双重切片与`np.rot90(a,2)`相同。看看它的代码。 (4认同)