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 столбцов. Вы можете получить это поведение с помощью этого параметра. Это влияет только на высокие матрицы.
См. также
Примечания
Добавлена в версии 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