numpy.diagonal#

numpy.диагональ(a, смещение=0, axis1=0, axis2=1)[источник]#

Возвращает указанные диагонали.

Если a если 2-D, возвращает диагональ a с заданным смещением, т.е. набор элементов вида a[i, i+offset]. Если a имеет более двух измерений, то оси, указанные axis1 и axis2 используются для определения 2-D подмассива, чья диагональ возвращается. Форма результирующего массива может быть определена удалением axis1 и axis2 и добавление индекса справа, равного размеру результирующих диагоналей.

В версиях NumPy до 1.7 эта функция всегда возвращала новый независимый массив, содержащий копию значений на диагонали.

В NumPy 1.7 и 1.8 он продолжает возвращать копию диагонали, но полагаться на этот факт устарело. Запись в результирующий массив продолжает работать как раньше, но выдается предупреждение FutureWarning.

Начиная с NumPy 1.9 возвращает доступное только для чтения представление исходного массива. Попытка записи в результирующий массив вызовет ошибку.

В будущем выпуске он будет возвращать представление для чтения/записи, и запись в возвращенный массив изменит ваш исходный массив. Возвращенный массив будет иметь тот же тип, что и входной массив.

Если вы не записываете данные в массив, возвращаемый этой функцией, то можете просто проигнорировать всё вышесказанное.

Если вы зависите от текущего поведения, то мы предлагаем явно копировать возвращаемый массив, т.е. использовать np.diagonal(a).copy() вместо просто np.diagonal(a). Это будет работать как с прошлыми, так и с будущими версиями NumPy.

Параметры:
aarray_like

Массив, из которого берутся диагонали.

смещениеint, необязательный

Смещение диагонали от главной диагонали. Может быть положительным или отрицательным. По умолчанию главная диагональ (0).

axis1int, необязательный

Ось, которая должна использоваться как первая ось 2-D подмассивов, из которых должны быть взяты диагонали. По умолчанию первая ось (0).

axis2int, необязательный

Ось, используемая в качестве второй оси 2-D подмассивов, из которых должны быть взяты диагонали. По умолчанию вторая ось (1).

Возвращает:
array_of_diagonalsndarray

Если a является двумерным, то одномерный массив, содержащий диагональ и того же типа, что и a возвращается, если не указано иное a является matrix, в этом случае одномерный массив, а не (двумерный) matrix возвращается для сохранения обратной совместимости.

Если a.ndim > 2, то измерения, указанные axis1 и axis2 удаляются, и в конце вставляется новая ось, соответствующая диагонали.

Вызывает:
ValueError

Если размерность a меньше 2.

Смотрите также

diag

Аналог MATLAB для одномерных и двумерных массивов.

diagflat

Создать диагональные массивы.

trace

Сумма по диагоналям.

Примеры

>>> import numpy as np
>>> a = np.arange(4).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a.diagonal()
array([0, 3])
>>> a.diagonal(1)
array([1])

Пример в 3-D:

>>> a = np.arange(8).reshape(2,2,2); a
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> a.diagonal(0,  # Main diagonals of two arrays created by skipping
...            0,  # across the outer(left)-most axis last and
...            1)  # the "middle" (row) axis first.
array([[0, 6],
       [1, 7]])

Подмассивы, главные диагонали которых мы только что получили; обратите внимание, что каждый соответствует фиксации самой правой (столбцовой) оси и что диагонали «упакованы» в строки.

>>> a[:,:,0]  # main diagonal is [0 6]
array([[0, 2],
       [4, 6]])
>>> a[:,:,1]  # main diagonal is [1 7]
array([[1, 3],
       [5, 7]])

Антидиагональ может быть получена обратным порядком элементов с использованием либо numpy.flipud или numpy.fliplr.

>>> a = np.arange(9).reshape(3, 3)
>>> a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> np.fliplr(a).diagonal()  # Horizontal flip
array([2, 4, 6])
>>> np.flipud(a).diagonal()  # Vertical flip
array([6, 4, 2])

Обратите внимание, что порядок, в котором извлекается диагональ, варьируется в зависимости от функции переворота.