Spec-Zone.ru › NumPy 1.21

numpy.fill_diagonal

numpy.fill_diagonal(a, val, wrap=False)[source]

Заполнить главную диагональ заданного массива любой размерности.

Для массива a с a.ndim >= 2, диагональ — это список местоположений с индексами a[i, ..., i] все одинаковы. Эта функция изменяет входной массив на месте, она не возвращает значения.

Параметры
aмассив, по крайней мере 2-мерный.

Массив, чья диагональ должна быть заполнена, он изменяется на месте.

valскаляр или array_like

Значение(я) для записи на диагональ. Если val — скаляр, значение записывается вдоль диагонали. Если array_like, то сплющенное значение val записывается вдоль диагонали, повторяясь при необходимости, чтобы заполнить все элементы диагонали.

wrapbool

Для высоких матриц в NumPy версии до 1.6.2 диагональ «обертывалась» после N столбцов. Вы можете получить это поведение с помощью этого параметра. Это влияет только на высокие матрицы.

См. также

diag_indices, diag_indices_from

Примечания

Введено в версии 1.4.0.

Это функциональность может быть получена с помощью diag_indices, но внутренне эта версия использует гораздо более быструю реализацию, которая никогда не строит индексы и использует простые срезы.

Примеры

>>> a = np.zeros((3, 3), int)
>>> np.fill_diagonal(a, 5)
>>> a
array([[5, 0, 0],
       [0, 5, 0],
       [0, 0, 5]])

Такая же функция может работать с 4-мерным массивом:

>>> a = np.zeros((3, 3, 3, 3), int)
>>> np.fill_diagonal(a, 4)

Мы показываем только несколько блоков для ясности:

>>> a[0, 0]
array([[4, 0, 0],
       [0, 0, 0],
       [0, 0, 0]])
>>> a[1, 1]
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 0]])
>>> a[2, 2]
array([[0, 0, 0],
       [0, 0, 0],
       [0, 0, 4]])

Параметр wrap влияет только на высокие матрицы:

>>> # tall matrices no wrap
>>> a = np.zeros((5, 3), int)
>>> np.fill_diagonal(a, 4)
>>> a
array([[4, 0, 0],
       [0, 4, 0],
       [0, 0, 4],
       [0, 0, 0],
       [0, 0, 0]])
>>> # tall matrices wrap
>>> a = np.zeros((5, 3), int)
>>> np.fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0],
       [0, 4, 0],
       [0, 0, 4],
       [0, 0, 0],
       [4, 0, 0]])
>>> # wide matrices
>>> a = np.zeros((3, 5), int)
>>> np.fill_diagonal(a, 4, wrap=True)
>>> a
array([[4, 0, 0, 0, 0],
       [0, 4, 0, 0, 0],
       [0, 0, 4, 0, 0]])

Противоположную диагональ можно заполнить, изменив порядок элементов с помощью либо numpy.flipud, либо numpy.fliplr.

>>> a = np.zeros((3, 3), int);
>>> np.fill_diagonal(np.fliplr(a), [1,2,3])  # Horizontal flip
>>> a
array([[0, 0, 1],
       [0, 2, 0],
       [3, 0, 0]])
>>> np.fill_diagonal(np.flipud(a), [1,2,3])  # Vertical flip
>>> a
array([[0, 0, 3],
       [0, 2, 0],
       [1, 0, 0]])

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

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

Spec-Zone.ru

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