Spec-Zone.ru › NumPy 1.21

numpy.diagonal

numpy.diagonal(a, offset=0, axis1=0, axis2=1)[source]

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

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

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

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

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

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

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

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

Параметры
aarray_like

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

offsetint, необязательно

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

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

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

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

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

Возвращает
array_of_diagonalsndarray

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

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

Возбуждает
ValueError

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

См. также

diag

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

diagflat

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

trace

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

Примеры

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

Пример с 3-мерным массивом:

>>> 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])

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

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.diagonal.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API