Подтвердить что ты не робот

Получение противоположной диагонали множества numpy

Итак, в массивах numpy есть встроенная функция для получения диагональных индексов, но я не могу понять, как получить диагональ, начиная с верхнего правого, а не сверху слева.

Это нормальный код, начинающийся с левого верхнего угла:

>>> import numpy as np
>>> array = np.arange(25).reshape(5,5)
>>> diagonal = np.diag_indices(5)
>>> array
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]])
>>> array[diagonal]
array([ 0,  6, 12, 18, 24])

так что я использую, если я хочу, чтобы он возвращался:

array([ 4,  8, 12, 16, 20])
4b9b3361

Ответ 1

Существует

In [47]: np.diag(np.fliplr(array))
Out[47]: array([ 4,  8, 12, 16, 20])

или

In [48]: np.diag(np.rot90(array))
Out[48]: array([ 4,  8, 12, 16, 20])

Из двух < <22 > быстрее:

In [50]: %timeit np.diag(np.fliplr(array))
100000 loops, best of 3: 4.29 us per loop

In [51]: %timeit np.diag(np.rot90(array))
100000 loops, best of 3: 6.09 us per loop

Ответ 2

Вот две идеи:

step = len(array) - 1

# This will make a copy
array.flat[step:-step:step]

# This will make a veiw
array.ravel()[step:-step:step]