Spec-Zone.ru › NumPy 2.0

numpy.fill_diagonal

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

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

Для массива a с a.ndim >= 2, диагональ — это список значений a[i, ..., 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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.fill_diagonal.html

Spec-Zone.ru

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