Число ответов пока. @Akavall ближе всего, так как вам нужно вращать или фиксировать и переносить (эквиквизиционные операции). Я не видел ответа от ОП относительно ожидаемого поведения на «длинной» части прямоугольника.
Обобщенное решение для квадратной матрицы:
a = 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]])
>>> [(i, np.rot90(a).diagonal(2*i-a.shape[0]+1)) for i in range(a.shape[0])]
[(0, array([0])),
(1, array([ 2, 6, 10])),
(2, array([ 4, 8, 12, 16, 20])),
(3, array([14, 18, 22])),
(4, array([24]))]
В качестве функции:
def reverse_diag(arr, n):
idx = 2*n - arr.shape[0]+1
return np.rot90(arr).diagonal(idx)
исходная матрица может быть квадрат с a[:np.min(a.shape),:np.min(a.shape)]
EDIT: ОП указывает на массив квадрат .... Итоговый ответ приведен выше
есть два ответа, которые выглядят недостаточно обобщенными, потому что ваш образец a невелик. Вы хотите, чтобы ответ для [2,2] был [7, 10]? связанный с этим вопрос, можете ли вы быть прямоугольным в другом направлении (высокий не широкий)? –
Мой пример - 8 на 8 (0: 7) .. Надеюсь, что поможет – MasterWizard