Получение диагонали матрицы в numpy и исключение элемента - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь получить диагональные элементы матрицы, исключая один диагональный элемент.Если мне нужны полные диагональные элементы, я знаю, что могу просто сделать A.numpy.diagonal(), где A - это пустая квадратная матрица, чтобы получить полный массив диагональных элементов.Но я не хочу A[i][i] для некоторых i.Поэтому очевидно, что я могу удалить элемент, соответствующий i из вывода A.numpy.diagonal().Но я думаю, что это медленнее, чем использование нарезки?Как можно использовать нарезку для этой задачи, чтобы получить все диагональные элементы, кроме компонента на A[i][i]?

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете добиться того же поведения, что и diagonal, просто используя arange для строк и столбцов.Удалите индекс, который вас не интересует, прежде чем индексировать (как отметил @hpaulj в комментариях, практически быстрее просто найти диагональ и впоследствии удалить индекс):


Настройка

a = np.arange(25).reshape(5,5)
i = 3     # exclude the diagonal element at index 3

array([[ 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]])

d = np.arange(a.shape[0])
m = np.delete(d, i)

a[m, m]

array([ 0,  6, 12, 24])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...