如何在 numpy 中创建反对角单位矩阵(其中对角线从左向右翻转)

How to create an anti-diagonal identity matrix (where the diagonal is flipped left to right) in numpy

如何在 numpy 中创建反对角矩阵?我当然可以手动完成,但很好奇是否有它的功能。

我正在寻找一个矩阵,其中的矩阵从左下角到右上角,其他地方都为零。

一种方法是翻转矩阵,计算对角线,然后再翻转一次。

numpy 中的 np.diag() 函数要么从矩阵中提取对角线,要么从数组构建对角线矩阵。你可以使用它两次来获得对角矩阵。

所以你会得到这样的东西:

import numpy as np
a = np.arange(25).reshape(5,5)
>>> a
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]
 [20 21 22 23 24]]
b = np.fliplr(np.diag(np.diag(np.fliplr(a))))
>>> b
[[ 0  0  0  0  4]
 [ 0  0  0  8  0]
 [ 0  0 12  0  0]
 [ 0 16  0  0  0]
 [20  0  0  0  0]]

不过我不确定执行所有这些操作的效率如何。

这是一个反对角矩阵,而不是单位矩阵的翻转版本。

如果您想要翻转版本的单位矩阵,只需在 np.eye(n) 的输出上调用 np.fliplr()。例如:

>>> np.fliplr(np.eye(5))
array([[ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.]])

使用 np.eye(n)[::-1] 将产生:

array([[ 0.,  0.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.]])

对于n=5