如何有效地沿对角线翻转 numpy 数组?

How to flip numpy array along the diagonal efficiently?

假设我有以下数组(注意 [2,0] 位置有一个 1,[3,4] 位置有一个 2):

[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[0, 0, 0, 0, 2]
[0, 0, 0, 0, 0]

我想有效地沿对角线翻转它,这样:

[0, 0, 1, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 2, 0]

这不适用于 fliplr、rot90 或 flipud。想要有效的答案而不仅仅是答案,因为不幸的是这不是在这么小的矩阵上执行的。

np.rot90(np.fliplr(x)) 和转置数组都解决了这个问题。

a = np.random.uniform(size=(5,5))
a.T == np.rot90(np.fliplr(a))