Как создать антидиагональную единичную матрицу (где диагональ переворачивается слева направо) в numpy - PullRequest
0 голосов
/ 23 мая 2018

Как я могу создать антидиагональную матрицу в NumPy?Я, конечно, могу сделать это вручную, но любопытно, есть ли для него функция.

Я ищу матрицу, в которой матрицы идут слева направо и сверху справа, а нули повсюду.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Используйте 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

0 голосов
/ 23 мая 2018

Один из способов - перевернуть матрицу, вычислить диагональ и затем перевернуть ее еще раз.

Функция np.diag() в numpy либо извлекает диагональ из матрицы, либо строит диагональную матрицу из массива,Вы можете использовать его дважды, чтобы получить диагональную матрицу.

Таким образом, у вас будет что-то вроде этого:

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.fliplr() на выходе np.eye(n).Например:

>>> 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.]])
...