Spec-Zone.ru › NumPy 1.17

numpy.diagonal

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

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

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

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

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

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

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

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

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

Параметры:
a : array_like

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

offset : int, optional

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

axis1 : int, optional

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

axis2 : int, optional

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

Возвращает:
array_of_diagonals : ndarray

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

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

Возможные исключения:
ValueError

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

См. также

diag
Аналог MATLAB для 1-мерных и 2-мерных массивов.
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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.diagonal.html

Spec-Zone.ru

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