Получить анти-диагональ массива Numpy - PullRequest
0 голосов
/ 11 июня 2019

У меня есть массив Numpy, и я хотел бы получить его перевернутую диагональ ...

>>> import numpy as np
>>> arr = np.eye(6, dtype=int)
>>> arr
... array([[1, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 0, 0, 1]])

Я знаю, что для получения диагонали я могу сделать это:

>>> arr.diagonal()
... array([1, 1, 1, 1, 1, 1])

Но я бы хотел получить антидиагональность.

>>> flipped_arr = np.fliplr(arr)
>>> flipped_arr
... array([[0, 0, 0, 0, 0, 1],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [1, 0, 0, 0, 0, 0]])

Вот что происходит, когда я пытаюсь получить диагональ flipped_arr:

>>> flipped_arr.diagonal()
... array([0, 0, 0, 0, 0, 0])

Есть лиспособ решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Похоже, вы уже ответили на свой вопрос.

np.fliplr(arr).diagonal()

- это обратная диагональ arr.

0 голосов
/ 11 июня 2019

Вам просто нужно небольшое изменение ..

 import numpy as np
 arr = np.eye(6, dtype=int)
 arr
 array([[1, 0, 0, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 0, 0, 1]])
 arr.diagonal()
 array([1, 1, 1, 1, 1, 1])

Ваша анти-диагональ похожа на ..

 flipped_arr = np.fliplr(arr)
 flipped_arr
 array([[0, 0, 0, 0, 0, 1],
           [0, 0, 0, 0, 1, 0],
           [0, 0, 0, 1, 0, 0],
           [0, 0, 1, 0, 0, 0],
           [0, 1, 0, 0, 0, 0],
           [1, 0, 0, 0, 0, 0]])

Теперь вам нужно распечатать диагональ flipped_arr.

Вот код для получения диагонали flipped_arr ..

np.diag(np.fliplr(flipped_arr))

#array[1,1,1,1,1,1] - Output

Надеюсь, это полезно!

0 голосов
/ 11 июня 2019

Итак, вы хотели бы получить антидиагональ, у вас, кажется, уже есть решение

def anti_diagonal(arr):
    return np.fliplr(arr).diagonal()

Так что для матрицы типа

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

тогда anti_diagonal будет

 [1, 2, 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...