Spec-Zone.ru › NumPy 1.18

numpy.fill_diagonal

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

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

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

Параметры
aarray, at least 2-D.

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

valscalar

Значение, которое нужно записать на диагонали; его тип должен быть совместим с типом массива a.

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

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

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

Spec-Zone.ru

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